Грешка при избор на контури

Работя по проект за компютърна обработка на изображения, включващ сегментиране на обектите и намерих контурите, но искам да нарисувам само някои от тях, например първия, за да го запълня допълнително с цвят. За съжаление, продължавам да получавам тази грешка: TypeError: Expected CvSeq for argument 'contour'.

Ето частта от кода, където възниква грешка.

mem=cv.CreateMemStorage()
nc=cv.FindContours(img_th,mem,cv.CV_RETR_LIST,cv.CV_CHAIN_APPROX_SIMPLE,(0,0))  
c=nc[1]
cv.DrawContours(img_adth,c,cv.CV_RGB(255,0,0),cv.CV_RGB(0,255,0),2,2,-1) 

person user2512787    schedule 23.06.2013    source източник


Отговори (1)


Получавате грешка от функцията за чертане.

Никога не съм използвал opencv python API, но предполагам, че за разлика от C++, C и python API имат различен стил на представяне на контури.

В C++ можете да изберете идентификатор на контур и да начертаете само този. Ако искате да начертаете всички контури, въвеждате id = -1.

В C/Python вие "насочвате" контура във вектора, за да начертаете само този. И така, контури (nc) е указател към първия контур. Ако искате да начертаете всички контури, използвайте цикъл while(contours != null).

За да бъда по-ясен, промених вашия код като такъв, опитайте се да използвате този. Не съм сигурен, така че ме уведомете дали това работи..

...
c = nc.next //until you select exact one
cv.DrawContours(img_adth,c,cv.CV_RGB(255,0,0),cv.CV_RGB(0,255,0),2,2,-1) 
person baci    schedule 23.06.2013