python探测图像中边框_边缘检测,框出物体的轮廓(使用opencv-python)

本文介绍了如何使用opencv-python的cv2.findContours()函数来检测图像边缘,提取物体轮廓,并展示了不同方法如Canny边缘检测、轮廓绘制、多边形筛选等,以更精确地框出目标物体。
摘要由CSDN通过智能技术生成

边缘检测、边缘探测、轮廓绘制、多边形、区域分割、edge_detection、object_segmentation,使用opencv-python的函数cv2.findContours(),框出物体的轮廓

(关键词↑)

图片处理效果预览↑(就是封面图片),从左到右依次是:原图

阈值图(第一行)、Canny边缘提取(第二行)

蓝色矩形、绿色最小矩形、红色最小圆形

蓝色等高线轮廓、绿色贴合轮廓、红色包围轮廓

核心代码预览:

thresh, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

approx = cv2.approxPolyDP(cnt, epsilon, True)

hull = cv2.convexHull(cnt)

x, y, w, h = cv2.boundingRect(cnt)

min_rect = cv2.minAreaRect(cnt)

(x, y), radius = cv2.minEnclosingCircle(cnt)2018-06-30 初版 Yonv1943

2018-07-02 删除图片水印,其他小改动

2018-08-15 修复GitHub链接,感谢 知乎用户Yozora 在评论中指出错误

2018-11-24 回复评论内容,增加对多边形的筛选

我不满足于用一个矩形将图片中的目标框出,所以我寻找可以将目标的轮廓框出来的算法,最终我在opencv库里面找到了这个函数cv2.findContours(),参考另外一篇非常好的资料后(那篇非常好的资料→)OpenCV for detecting Edges, lines and shapes,我写出来本篇文章。

想要在自己电脑上运行的话,直接去上面这里↑复制、保存为*.py文件,并准备一张背景简单的测试图片,比如说这一张:test.png

下面是 TUTR_edge_detection.py 的流程图↓edge_detection.py 使用ProcessOn 绘制流程图

edge_detection.py

读取图片,并处理为二值图

cv2.imread('test.png') # a black objects on white image is better

# gray = cv2.cvtColor(image.copy(), cv2.COLOR_BGR2GRAY)

# ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

thresh = cv2.Canny(image, 128, 256)

得到二值图后,使用cv2.findContours() 得到等高线 contours,关于它的三个参数,一般不需要改动:第一个是传入的二值图,不等于0的像素将参与等高线的计算

第二个决定hierarchy 采取什么样的格式输出,具体格式看→Contours Hierarchy

thresh, contours, hierarchy = cv2.findContours(thresh, cv2.R

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值