python opencv轮廓提取_Python+OpenCV图像处理之轮廓发现

importcv2importnumpy as np__author__ = "boboa"

defcontours_demo(image):

dst= cv2.GaussianBlur(image, (3, 3), 0)

gray=cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY)

ret, thresh= cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY |cv2.THRESH_OTSU)

cv2.imshow("binary image", thresh)#得到修改后的图像,轮廓,轮廓的层次

cloneimage, contours, hierarchy =cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)"""cv2.findContours(image, mode, method, contours, hierarchy, offset)

参数:

1 要寻找轮廓的图像 只能传入二值图像,不是灰度图像

2 轮廓的检索模式,有四种:

cv2.RETR_EXTERNAL表示只检测外轮廓

cv2.RETR_LIST检测的轮廓不建立等级关系

cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层

cv2.RETR_TREE建立一个等级树结构的轮廓

3 轮廓的近似办法

cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1

cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息

返回值:

contours:一个列表,每一项都是一个轮廓,不会存储轮廓所有的点,只存储能描述轮廓的点

hierarchy:一个ndarray, 元素数量和轮廓数量一样,

每个轮廓contours[i]对应4个hierarchy元素hierarchy[i][0] ~hierarchy[i][3],

分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号,如果没有对应项,则该值为负数"""

for i, contour inenumerate(contours):#绘制轮廓

cv2.drawContours(image, contours, i, (0, 0, 255), 2)"""# 函数cv2.drawContours(image, contours, contourIdx, color, thickness, lineType, hierarchy, maxLevel, offset)

# 第一个参数是一张图片,可以是原图或者其他。

# 第二个参数是轮廓,也可以说是cv2.findContours()找出来的点集,一个列表。

# 第三个参数是对轮廓(第二个参数)的索引,当需要绘制独立轮廓时很有用,若要全部绘制可设为-1。

# 接下来的参数是轮廓的颜色和厚度"""

print(i)

cv2.imshow("detect contours", image)if __name__ == "__main__":

img= cv2.imread("image/circles.jpg")

cv2.namedWindow("input image", cv2.WINDOW_AUTOSIZE)

cv2.imshow("input image", img)

contours_demo(img)

cv2.waitKey(0)

cv2.destroyAllWindows()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值