从阈值图像中查找轮廓

时间:2017-02-09 12:56:55

标签: python opencv

我目前正在阅读OpenCV网站上的示例代码,以查找图像中的轮廓。

我首先阅读图像并转换为灰度:

img = cv2.imread('/.../.../four.png')
imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

然后我通过应用阈值将图像转换为二进制文件:

thresh = cv2.threshold(imgray, 127, 255, 0, cv2.THRESH_BINARY)

根据教程..我应该可以在阈值图像上调用findContours()

contours = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

尝试执行此代码时,出于某种原因我收到类型错误:

  

轮廓=   cv2.findContours(THRESH,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)    TypeError:image不是数字元组

不确定为什么?

以下是完整代码,以便于阅读:

img = cv2.imread('/Users/samtozer/Desktop/four.png')
imgray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(imgray, 127, 255, 0, cv2.THRESH_BINARY)
contours = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

cv2.drawContours(img, contours, -1, (0,255,0), 3)

想知道以前是否有人遇到过这个问题?如果是这样,xD

会出现什么问题

提前致谢

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的,您需要注意两个问题:

返回cv2.findContours()

的类型

cv2.findContours()中有两个返回值:

  • 图像中出现的轮廓
  • 这些轮廓的层次结构

返回cv2.threshold()

的类型

cv2.threshold()中有两个返回值:

  • 返回值。 (它返回阈值的float值,用于对像素值进行分类)
  • 阈值图像