OpenCV version 4.1.0 drawContours

匿名 (未验证) 提交于 2019-12-03 01:39:01

问题:

I have the following code that worked well with OPenCV 3.4.1 and now is not working with OpenCV 4.1.0 and gives an error. I do not know how to adapt the code with the newer version, can you help me with that? Thanks a lot

def ImageProcessing(image):     image = cv2.absdiff(image, background)     h, gray = cv2.threshold(image, 65, 255, cv2.THRESH_BINARY_INV);     gray = cv2.medianBlur(gray,5)      kernel = np.ones((3,3), np.uint8)      gray = cv2.erode(gray, kernel, iterations=1)#1      des = cv2.bitwise_not(gray)     tmp = cv2.findContours(des,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE)     contour, hier = tmp[1], tmp[0]      for cnt in contour:         cv2.drawContours(des,[cnt],0,255,-1)      gray = cv2.bitwise_not(des)      gray = cv2.dilate(gray, kernel, iterations=1)#1      return gray 

The error is

    cv2.drawContours(des,[cnt],0,255,-1) cv2.error: OpenCV(4.1.0) /io/opencv/modules/imgproc/src/drawing.cpp:2509: error: (-215:Assertion failed) npoints > 0 in function 'drawContours' 

回答1:

Depending on the OpenCV version, cv2.findContours() has varying return signatures.

In OpenCV 3.4.X, cv2.findContours() returns 3 items

image, contours, hierarchy = cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) 

In OpenCV 4.1.X, cv2.findContours() returns 2 items

contours, hierarchy = cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]]) 

You can easily obtain the contours like this:

tmp = cv2.findContours(des,cv2.RETR_CCOMP,cv2.CHAIN_APPROX_SIMPLE) contours = tmp[0] if len(tmp) == 2 else tmp[1] 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!