这是我的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 ... 这是我们项目的一部分,请提供帮助。
答案 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]
如果要获取轮廓。