如何在Python中使用OpenCV检测和绘制轮廓?

时间:2017-01-05 13:50:03

标签: python opencv image-processing opencv-contour opencv-drawcontour

我编写了以下代码来检测和绘制轮廓:

img = cv2.imread('test2.tif');

if not img is None:
    imgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY);
    ret,thresh = cv2.threshold(imgray,127,255,0);
    contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE);

    #draw a three pixel wide outline 
    cv2.drawContours(img,contours,-1,(0,255,0),3);

这是我收到的错误:

  

追踪(最近一次通话):         文件" C:/Users/R.K.singh/Desktop/Image processing / intro-to-contours.py",第10行,in           contours,hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE);       ValueError:要解压缩的值太多

有什么问题?我使用的是Python 2.7和OpenCV 3.1.0

2 个答案:

答案 0 :(得分:2)

更改以下行。您正在使用OpenCV 3.1.0,但您已使用OpenCV 2.7.x编码。

(cnts, _) = cv2.findContours(thresh.copy(), cv2.RETR_TREE,
      cv2.CHAIN_APPROX_SIMPLE)

link也可以为您提供帮助。

答案 1 :(得分:2)

为了强调Selchuk的观点,涉及OpenCV 3.x的语法已经发生了一些变化。它涉及cv2.findContours时具有不同的返回值。它返回以下image, contours, hierarchy

然而,早期版本的OpenCV仅返回contours, hierarchy。他们不会返回图像。