2011-04-06 10 views
9

मैं OpenCV 2.2 स्थापित किया है में drawContours OpenCV समारोह और जब मैं drawContours इस्तेमाल करने की कोशिश मैं मिल निम्न त्रुटि:का उपयोग अजगर

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

cv.drawContours(frame, contours, 0, cv.RGB(255, 0, 0)) 
TypeError: <unknown> is not a numpy array 

इस त्रुटि से संबंधित कोड पीछा कर रहा है

पायथन दस्तावेज पैरामीटर के सही क्रम के अनुरूप नहीं है (मुझे पता है कि सही क्रम आईडीएलई के लिए धन्यवाद) और इस फ़ंक्शन के लिए सी ++ दस्तावेज़ मुझे बहुत मदद नहीं करता है

यहाँ पूर्ण कोड (प्रासंगिक कोड) है:

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

आपको जानकारी होना चाहिए ड्रॉकंटर्स और ड्राकंटोर दो अलग-अलग फ़ंक्शन हैं। वे वास्तव में एक ही काम करते हैं, लेकिन वे विभिन्न मानकों को स्वीकार करते हैं। मेरा मानना ​​है कि पहला व्यक्ति केवल सीवीएमएटी या ओपनसीवी से अन्य सरणी के बजाय numpy arrays स्वीकार करता है।

2

आप DrawContours का अजगर संदर्भ में समारोह मापदंडों की जांच होनी चाहिए, और पैरामीटर जब के आदेश पर भरोसा करने के लिए नहीं की कोशिश एक फ़ंक्शन को कॉल करना जो एकाधिक तर्क लेता है, आपको लेबल का उपयोग करना चाहिए।

दूसरे शब्दों में:

cv.DrawContours(img=frame, contour=contours, ...) 

आप DrawContours के दस्तावेजीकरण की जांच:

  • 5:

    DrawContours(img, contour, external_color, hole_color, max_level, thickness=1, lineType=8, offset=(0, 0)) 
    

    आपको लगता है कि समारोह 8 तर्क स्वीकार करता देखेंगे आवश्यक (img, contour, external_c olor, 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) 
+0

सही फ़ंक्शन पैरामीटर आधिकारिक संदर्भ (मैं इस बेवकूफ लगता है) के साथ अनुरूप नहीं है। जैसा कि आप ने कहा कि अगर मैं ऐसा निम्न त्रुटि उठाया है: 'लेखन त्रुटि: आवश्यक तर्क 'contourIdx' (स्थिति 3) – Manuel

+0

found' नहीं आप कोड दिखा सकता है? – P2bM

+0

एक छोटे से ब्रेक के बाद, मुझे लगता है कि त्रुटि आकृति पीढ़ी – Manuel

0

मैं पाया है कुछ OpenCV 2.2 के पायथन रैपर में त्रुटियां। उदाहरण "camshift.py" ओपनसीवी 2.1 के साथ चलाएं लेकिन ओपनसीवी 2.2 के साथ नहीं। मुझे लगता है कि मेरी समस्या यह बग (अब मैं 2.1 संस्करण का उपयोग करेंगे)

मैं इस बग की सूचना दी है और साथ ही प्रलेखन त्रुटि से derivated रहे

@ P2bM धन्यवाद आपकी मदद के लिए

+0

कोई मुझे धन्यवाद करने के लिए की आवश्यकता के साथ किसी भी पैरामीटर देखते हैं stackoverflow में आपका स्वागत है :) – P2bM

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)) 
संबंधित मुद्दे