在python中使用drawContours OpenCV函数

时间:2011-04-06 11:08:51

标签: python opencv

我已经安装了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)

提前致谢

4 个答案:

答案 0 :(得分:6)

你应该知道drawContours和DrawContours是两个不同的功能。他们实际上做同样的事情,但他们接受不同的参数。我相信第一个只接受numpy数组而不是CvMat或openCV中的其他数组。

答案 1 :(得分:2)

你应该检查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个可选(厚度,线型,偏移)

并且没有名为contourIdxcolor

的参数

例如:

cv.DrawContours(img=frame, contour=contours, external_color=cv.RGB(255, 0, 0), hole_color=cv.RGB(0, 255, 0), max_level=1 ) 

答案 2 :(得分:1)

使用OpenCV Cheatsheet上给出的函数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))

答案 3 :(得分:0)

我在OpenCV 2.2的Python包装器中发现了一些错误。 “ camshift.py ”等示例与OpenCV 2.1一起运行,但不与OpenCV 2.2一起运行。我想我的问题是从这个bug中衍生出来的(现在我将使用2.1版本)

我已经报告了此错误以及文档错误

@ P2bM感谢您的帮助