Opencv-python轮廓检测

目录

cv2.findContours

cv2.drawContours

代码及实验图

         最近使用opencv-python检测图像轮廓的时候出现了一些错误,现在对常用的两个算法进行总结。

1、cv2.findContours()

contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

 1.1 返回值

         该函数在opencv4.0之前有三个返回值,4.0之后就只有两个返回参数了;

         第一个返回值contours(轮廓的点集),该返回值是一个列表,可以有多项,每一项都代表一个轮廓,代表储存轮廓的点;

          第二个返回值hierachy,代表各层轮廓的索引;

          opencv4.0以前的版本,还多加一个参数image,代表处理的图像

1.2 参数

         第一个参数是要寻找轮廓的图像,只能传入二值图像,不是灰度图像也不是彩色图像。 

        第二个参数是轮廓的检索模式:cv2.RETR_EXTERNAL表示只检测外轮廓;v2.RETR_LIST检测的轮廓不建立等级关系;cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层 ;cv2.RETR_TREE建立一个等级树结构的轮廓。

       第三个参数是轮廓的近似方法 cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),abs(y2-y1))==1;cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩形轮廓只需4个点来保存轮廓信息。

2 cv2.drawContours

cv2.drawContours(image, contours, contourIdx, color, thickness=None, lineType=None, hierarchy=None, maxLevel=None, offset=None)

        第一个参数是指明在那幅图像上绘制轮廓;

        第二个参数是要画轮廓本身;

        第三个参数指定绘制轮廓List中的那条轮廓,-1代表绘制其中的所有轮廓;

        第四个参数指画轮廓的颜色 第五个参数指画轮廓线的宽度,如果为-1则表明填充。

3 代码及实验图

import cv2

path = 'F:\\t\\venv\\1.jpg'

image = cv2.imread(path)
gray_image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

_,binary_image = cv2.threshold(gray_image,125,255,0)
cv2.imshow('1',binary_image)
cv2.waitKey()
cv2.imwrite('F:\\t\\venv\\2.jpg',binary_image)
cv2.imwrite('F:\\t\\venv\\3.jpg',gray_image)

contours,hierachy = cv2.findContours(binary_image,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
points = contours[0]
length =  points.shape[0]
for index,circle in enumerate(contours):
        cv2.drawContours(binary_image, [circle], -1, (128, 128, 128), 10)
cv2.imshow(str(index),binary_image)
cv2.waitKey()
cv2.imwrite('F:\\t\\venv\\5.jpg',binary_image)

 原图

灰度图 

二值图像 

轮廓检测在原图显示 (设置成灰边)

轮廓检测结果在二值图像中显示(图中灰色边缘) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值