2015-09-03 2 views
0

Я пытаюсь отслеживать красные объекты, используя opencv в python. Вот код, который я до сих пор:OpenCv Python Color Detection

#Identify red objects in an image 

#import OpenCV 
import cv2 
#Import numpy 
import numpy as np 

#open webcam 
imgcap=cv2.VideoCapture(0) 

while(1): 

    #view the image from the webcam 
    _, frame=imgcap.read() 
    #convert the image to HSV 
    hsv=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 

    #lower threshold for red 
    lower_red=np.array([0, 100, 75]) 
    #upper threshold for red 
    upper_red=np.array([5, 76, 100]) 

    mask=cv2.inRange(hsv, lower_red, upper_red) 

Когда я запускаю это ошибка, что приходит следующая:

OpenCV Error: Sizes of input arguments do not match (The lower bounary is    neither an array of the same size and same type as src, nor a scalar) in  cv::inRange, file ..\..\..\opencv-2.4.12\modules\core\src\arithm.cpp, line 2703 
Traceback (most recent call last): 
    File "red.py", line 23, in <module> 
    mask=cv2.inRange(hsv, lower_red, upper_red) 
cv2.error: ..\..\..\opencv-2.4.12\modules\core\src\arithm.cpp:2703: error: (-209) The lower bounary is neither an array of the same size and same type as src, nor a scalar in function cv::inRange 

Может кто-то пожалуйста, скажите мне, что я делаю неправильно? Я пробовал

lower_red=np.array([0, 100, 75], dtype=np.uint8) 

также, но это тоже не сработало.

ответ

2

Я предполагаю, что ошибка в строке hsv=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY), в соответствии с переменным наименованием я предполагаю, что вы хотите HSV изображение, но вы по ошибке использовали cv2.COLOR_BGR2GRAY вместо cv2.COLOR_BGR2HSV.

В cv2.COLOR_BGR2GRAY преобразует изображение в оттенки серого и возвращает один канал изображения таким образом, применение mask=cv2.inRange(hsv, lower_red, upper_red), где hsv представляет собой один канал изображения (при использовании cv2.COLOR_BGR2GRAY) и lower_red, upper_red оба имеют 3 элемента, что приводит к ошибке.

+0

Это сработало. Теперь это казалось глупой ошибкой. Спасибо. – Michael22T