cv2.error:OpenCV(4.0.0)/io/opencv/modules/imgproc/src/shapedescr.cpp:272

时间:2019-03-21 04:22:10

标签: python-3.x

这是我的python脚本:

while True:
    text = ""
    img = cam.read()[1]
    img = cv2.flip(img, 1)
    imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    dst = cv2.calcBackProject([imgHSV], [0, 1], hist, [0, 180, 0, 256], 1)
    disc = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(10,10))
    cv2.filter2D(dst,-1,disc,dst)
    blur = cv2.GaussianBlur(dst, (11,11), 0)
    blur = cv2.medianBlur(blur, 15)
    thresh = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)[1]
    thresh = cv2.merge((thresh,thresh,thresh))
    thresh = cv2.cvtColor(thresh, cv2.COLOR_BGR2GRAY)
    thresh = thresh[y:y+h, x:x+w]
    contours = cv2.findContours(thresh.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)[1]
    if len(contours) > 0:
        contour = max(contours, key = cv2.contourArea)
        if cv2.contourArea(contour) > 10000:
            x1, y1, w1, h1 = cv2.boundingRect(contour)
            save_img = thresh[y1:y1+h1, x1:x1+w1]

此代码可在另一个系统上正常工作,但是当我在系统上运行它时,  它显示以下错误:

  

cv2.error:OpenCV(4.0.0)/io/opencv/modules/imgproc/src/shapeescr.cpp:272:错误:(-215:断言失败)npoints> = 0 &&(深度== CV_32F | | depth == CV_32S)在函数“轮廓区域”中

这可能是由以下脚本引起的:

contour = max(contours, key = cv2.contourArea)

我正在使用ubuntu 18.02和opencv 4.0 ... 这是我们项目的一部分,请提供帮助。

1 个答案:

答案 0 :(得分:1)

之所以出现此问题,是因为cv2.findContours已从opencv中的V3.X更改为V4.0。 因此在V3.X中,它曾经是

findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> image, contours, hierarchy

返回了三个对象。

和V4.0 findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> contours, hierarchy

返回了两个对象。

所以您的代码应该是

contours = cv2.findContours(thresh.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)[0]

如果要获取轮廓。