我已经安装了OpenCV 2.2,当我尝试使用drawContours时,我得到以下错误:
cv.drawContours(frame, contours, 0, cv.RGB(255, 0, 0))
TypeError: <unknown> is not a numpy array
与此错误相关的代码如下:
storage = cv.CreateMemStorage(0)
contours = cv.FindContours (color_mask, storage, method = cv.CV_CHAIN_APPROX_SIMPLE)
cv.drawContours(frame, contours, 0, cv.RGB(255, 0, 0))
python文档与参数的正确顺序不一致(多亏了IDLE,我知道正确的顺序),这个函数的c++文档对我帮助不大
以下是完整代码(相关代码):
cv.NamedWindow("MyWindow", 1)
capture = cv.CaptureFromCAM(0)
while 1:
frame = cv.QueryFrame(capture)
color_mask = cv.CreateImage(cv.GetSize(frame), 8, 1)
cv.InRangeS(frame, cv.Scalar(*min_color), cv.Scalar(*max_color), color_mask)
cv.CvtColor(frame, frame, cv.CV_BGR2HSV)
storage = cv.CreateMemStorage(0)
contours = cv.FindContours (color_mask, storage, method = cv.CV_CHAIN_APPROX_SIMPLE)
cv.drawContours(image = frame, contours = contours, contourIdx = 0, color = cv.RGB(255, 0, 0))
cv.ShowImage("MyWindow", frame)
Thanks in advance
你应该知道drawContours和drawContours是两个不同的函数。它们实际上做同样的事情,但它们接受不同的参数。我相信第一个只接受numpy数组,而不是CvMat或openCV中的其他数组。
您应该检查DrawContours的python参考中的函数参数,并且在调用接受多个参数的函数时尽量不依赖于参数的顺序,您应该使用标签。
换句话说:
cv.DrawContours(img=frame, contour=contours, ...)
如果你检查DrawContours
的文档:
DrawContours(img, contour, external_color, hole_color, max_level, thickness=1, lineType=8, offset=(0, 0))
你会注意到这个函数接受8个参数:
- 5个需要(img, contour, external_color, hole_color, max_level)
- 3可选(厚度,lineType,偏移量)
没有contourIdx
或color
参数
,
cv.DrawContours(img=frame, contour=contours, external_color=cv.RGB(255, 0, 0), hole_color=cv.RGB(0, 255, 0), max_level=1 )
使用OpenCV小抄上给出的cv2array和array2cv函数将图像转换为特定格式
像这样:
imgray = array2cv(cv2.cvtColor(cv2array(image), cv.CV_RGB2GRAY))
storage = cv.CreateMemStorage(0)
contours = cv.FindContours(imgray, storage,cv.CV_RETR_LIST, cv.CV_CHAIN_APPROX_SIMPLE,(0,0))
我在OpenCV 2.2的Python包装中发现了一些错误。像"camshift.py"这样的例子可以在OpenCV 2.1中运行,但不能在OpenCV 2.2中运行。我想我的问题是从这个错误派生的(现在我将使用2.1版本)
我已经报告了这个错误以及文档错误
@P2bM感谢您的帮助