Вот два способа сделать это в Python / OpenCV.
Использовать пороговое значение цвета с помощью cv2.inRange (). Затем либо подсчитайте количество белых пикселей с помощью np.nonzero (), либо протестируйте среднее значение по пороговому изображению с помощью cv2.mean ().
Ввод:
import cv2
import numpy as np
# read image
img = cv2.imread('red_brushed.png')
# set red range
lowcolor = (0,0,255)
highcolor =(128,128,255)
# threshold
thresh = cv2.inRange(img, lowcolor, highcolor)
# Method 1: count number of white pixels and test if zero
count = np.sum(np.nonzero(thresh))
print("count =",count)
if count == 0:
print("Not Red")
else:
print("Red")
print("")
# Method 2: get the average of the image and test if zero
average = cv2.mean(thresh)[0]
print("average =",average)
if average == 0:
print("Not Red")
else:
print("Red")
# write thresholded image to disk
cv2.imwrite("red_brushed_thresh.png", thresh)
# display it
cv2.imshow("IMAGE", img)
cv2.imshow("THRESH", thresh)
cv2.waitKey(0)
С пороговым изображением:
Текстовые результаты:
count = 3534485
Red
average = 6.933746337890625
Red