как вернуть логическое значение, если в захваченной области существует определенный цвет, используя python - PullRequest
0 голосов
/ 08 марта 2020

Я новичок в python и только начал изучать его самостоятельно, и я не могу найти точное решение своей проблемы.

вот что я пытаюсь сделать.

  1. Захват изображения с использованием

  2. определить, существует ли определенный цвет (например, красный, синий, зеленый) в захваченном изображении

  3. return логическое

Я потратил пару дней на поиски ответа, но не могу найти ни одного.

Единственное, что я знаю, это использовать openCV ...

Полагаю, решение слишком простое, чтобы спрашивать. Я довольно плохо знаком с компьютерным языком, поэтому я был бы очень признателен как можно более подробно. спасибо! * * 1023

1 Ответ

2 голосов
/ 09 марта 2020

Вот два способа сделать это в Python / OpenCV.

Использовать пороговое значение цвета с помощью cv2.inRange (). Затем либо подсчитайте количество белых пикселей с помощью np.nonzero (), либо протестируйте среднее значение по пороговому изображению с помощью cv2.mean ().

Ввод:

enter image description here

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)


С пороговым изображением:

enter image description here

Текстовые результаты:

count = 3534485
Red

average = 6.933746337890625
Red


...