[英]OpenCv Python Color Detection
I am trying to keep track of red objects using opencv in python.我正在尝试在 python 中使用 opencv 跟踪红色对象。 Here is the code I have so far:
这是我到目前为止的代码:
#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)
When I run this, the error that comes up is the following:当我运行它时,出现的错误如下:
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
Can someone please tell me what I am doing wrong?有人可以告诉我我做错了什么吗? I have tried
我试过了
lower_red=np.array([0, 100, 75], dtype=np.uint8)
as well, but that didn't work either.同样,但这也不起作用。
I guess the error is in line hsv=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
, as per the variable naming I am assuming that you want a HSV image but you have mistakenly used cv2.COLOR_BGR2GRAY
in place of cv2.COLOR_BGR2HSV
.我猜错误在
hsv=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
,根据变量命名我假设您想要一个 HSV 图像,但您错误地使用cv2.COLOR_BGR2GRAY
代替cv2.COLOR_BGR2HSV
。
As cv2.COLOR_BGR2GRAY
converts the image to grayscale and returns a single channel image so applying mask=cv2.inRange(hsv, lower_red, upper_red)
where hsv
is a single channel image(while using cv2.COLOR_BGR2GRAY
) and lower_red
, upper_red
both have 3 elements which results in the error.由于
cv2.COLOR_BGR2GRAY
将图像转换为灰度并返回单通道图像,因此应用mask=cv2.inRange(hsv, lower_red, upper_red)
其中hsv
是单通道图像(同时使用cv2.COLOR_BGR2GRAY
)和lower_red
, upper_red
都有 3导致错误的元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.