我试图通过图像的平均RGB值来识别图像。但是,这个值可能会在RGB值中有轻微的偏差。我有一个精确值的数组,但在检查时,我希望检查每个元素中的值5或更小。
例如,如果我有一个值为30的红色,我想从25到35检查此颜色,绿色和蓝色也是如此
我有一个numpy数组,如果我打印它,它看起来像这样:[27. 26. 25.]如果它显示一个元素,则具有以下形式:27.0
这是目前代码的样子,我在Windows计算器映像上测试了它
import cv2
import numpy as np
import pygetwindow
import pyautogui
from PIL import Image
path = '../../Desktop/image.png'
titles = pygetwindow.getAllTitles()
flashes = [["25.", "26.", "27."]]
window = pygetwindow.getWindowsWithTitle('Calculator')[0]
left, top = window.topleft
right, bottom = window.bottomright
pyautogui.screenshot(path)
im = Image.open(path)
im = im.crop((left, top, right, bottom))
im.save(path)
src_img = cv2.imread(path)
average_color_row = np.average(src_img, axis=0)
average_color = np.round(np.average(average_color_row, axis=0))
print(average_color)
arr = np.array2string(average_color)
i = iter(average_color)
for x in flashes:
for y in x:
arr = np.array2string(next(i))
print(y)
print(arr)
if y == arr:
print("TRUE")
我想使用循环检查,如果R,G,B从检查的照片是在这个范围内。
例如,我的照片有这样一个平均RGB [25.25.25.],如果检查这些值[27.26.25.],这应该显示为真。
我试着在它周围循环,但我不知道如何完成它,看看是否所有3个值适合3个不同的范围。
有什么建议吗?
1条答案
按热度按时间s3fp2yjn1#
我会在RGB三元组之间做一个差值,然后检查是否有任何值大于阈值:
结果是一个True或False的向量,具体取决于是否存在大于阈值的值。