我试图在python中使用opencv跟踪红色对象。这是我到目前为止的代码:
#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)
同样,但这也没有奏效。
答案 0 :(得分:3)
我猜错误在行hsv=cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
中,根据变量命名,我假设你想要一个HSV图像,但你错误地使用cv2.COLOR_BGR2GRAY
代替cv2.COLOR_BGR2HSV
。< / p>
由于cv2.COLOR_BGR2GRAY
将图片转换为灰度并返回单个频道图片,因此应用mask=cv2.inRange(hsv, lower_red, upper_red)
hsv
是单个频道图片(使用cv2.COLOR_BGR2GRAY
时)和{{ 1}},lower_red
都有3个元素导致错误。