2011-04-06 113 views
9

我已經安裝了OpenCV的2.2,當我嘗試使用drawContours我得到以下錯誤:使用drawContours OpenCV的功能在Python

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) 

在此先感謝

回答

6

你應該知道drawContours和DrawContours是兩種不同的功能。他們實際上做同樣的事情,但他們接受不同的參數。我相信第一個只接受numpy數組而不是CvMat或來自openCV的其他數組。

2

您應該檢查在DrawContours蟒蛇參考函數的參數,儘量不要依靠參數時的順序調用一個需要多個參數的函數,你應該使用標籤。

換句話說:

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,輪廓,external_c的olor,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) 
+0

正確的函數參數不與官方參考(我知道這聽起來很愚蠢)相對應。如果我像你說的那樣提出以下錯誤:'TypeError:必需的參數'contourIdx'(pos 3)not found' – Manuel 2011-04-06 12:00:32

+0

你能顯示代碼嗎? – P2bM 2011-04-06 12:11:17

+0

經過一小段時間的休息之後,我認爲錯誤可能出現在代碼輪廓 – Manuel 2011-04-06 13:24:59

0

我已經發現了一些OpenCV 2.2的Python包裝中的錯誤。例如「camshift.py」與OpenCV 2.1一起運行,但不與OpenCV 2.2一起運行。我想我的問題,從這個bug(現在我將使用2.1版)

我已經報告這個錯誤以及文檔錯誤推導

@ P2bM感謝您的幫助

+0

不需要感謝我,歡迎來到stackoverflow :) – P2bM 2011-04-06 15:22:20

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))