图像轮廓检测

(一)检测轮廓

在OpenCV-python中,使用cv2.findContours()函数来对图像进行轮廓检测。

返回三个值:image,contours,hierarchy

contours指的是轮廓本身,hierarchy是每条轮廓对应的属性

cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])

参数:

  • 第一个参数是寻找轮廓的图像;
  • 第二个参数表示轮廓的检索模式:cv2.RETR_EXTERNAL表示只检测外轮廓    cv2.RETR_LIST检测的轮廓不建立等级关系,cv2.RETR_CCOMP建立两个等级的轮廓,上面的一层为外边界,里面的一层为内孔的边界信息。如果内孔内还有一个连通物体,这个物体的边界也在顶层。cv2.RETR_TREE建立一个等级树结构的轮廓。
  • 第三个参数method为轮廓的近似方法。cv2.CHAIN_APPROX_NONE存储所有的轮廓点,相邻的两个点的像素位置差不超过1,即max(abs(x1-x2),  abs(y1-y2))=1。   cv2.CHAIN_APPROX_SIMPLE压缩水平方向,垂直方向,对角线方向的元素,只保留该方向的终点坐标,例如一个矩阵轮廓只需4个点来保存轮廓信息。    cv2.CHAIN_APPROX_TC89_L1,    cv2.CHAIN_APPROX_TC89_KCOS使用teh-Chini chain近似算法

(二)绘制轮廓

OpenCV中使用cv2.drawContours在图像上绘制轮廓

cv2.drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[,maxLevel[, offset ]]]]])

参数:

  • 第一个参数传入所要绘制轮廓的背景图片
  • 第二个参数是轮廓本身
  • 第三个参数指定绘制轮廓中的哪条轮廓,如果是-1,则绘制其中的所有的轮廓。thickness表示的是轮廓的宽度,如果是-1(cv2.FILLED),表示为填充模式。

(三)代码实现

# 轮廓检测
img = cv2.imread('2.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 获取灰度图
ret, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)  # 利用阈值自动选择的方法获取二值图像
image, contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)  # 检测轮廓
cv2.drawContours(img, contours, -1, (0, 255, 0), 1)  # 画出轮廓
cv2.imshow('gray', binary)
cv2.imshow('res', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

python+OpenCV图像处理(十一)图像轮廓检测相关推荐

  1. OpenCV图像处理(十一)---图像梯度

    安培定则:也叫右手螺旋定则,是表示电流和电流激发磁场的磁感线方向间关系的定则.通电直导线中的安培定则(安培定则一):用右手握住通电直导线,让大拇指指向电流的方向,那么四指指向就是磁感线的环绕方向:通电 ...

  2. Python OpenCV 图像处理之 图像运算和图像位运算知识补充

    Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧.本篇博客是这个系列的第 51 篇. 该系列文章导航参考:https://blog.csdn.net/hihell/categ ...

  3. Python+Opencv图像处理--基于OTSU+凸包检测的粘连大米分割

    文章目录 前言 1.分割流程图 2.图像预处理 2.1 改进二值化算法 2.2 形态学运算 3.提取轮廓 4.凸包检测 5.标记大米 前言 转载请注明本文出处. 最近一段时间一直在看粘连分割,网上也有 ...

  4. Python OpenCV 图像处理之直方图的应用,取经之旅第 26 天

    Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧. Python OpenCV 基础知识铺垫 cv2.compareHist 函数 橡皮擦的小节 基础知识铺垫 上篇博客 Py ...

  5. 《OpenCv视觉之眼》Python图像处理二十一:Opencv图像处理之图像线性变换和非线性变换的方法及原理

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

  6. 【图像处理】——Python+opencv实现提取图像的几何特征(面积、周长、细长度、区间占空比、重心、不变矩等)

    转载请注明详细地址 本文简单介绍了图像常见几何特征的概念以及求解方法 本文介绍了Python和opencv求解几何特征的常用方法 目录 其他形状外接轮廓的方法可以参考:<OpenCV-Pytho ...

  7. OpenCV(六)之图像轮廓检测

    OpenCV(六)之图像轮廓检测 Contour detection系列 Contour detection-图像金字塔 图像金字塔-高斯金字塔 图像金字塔-拉普拉斯金字塔 Contour detec ...

  8. OPENCV图像轮廓检测

    前面在图像转换的时候学到canny算子,可以检测出图像的轮廓信息,但是,该算子检测到的轮廓信息还需要我们手动的用眼睛去识别,而实际工程应用中,我们需要得到轮廓的具体数学信息,这就涉及到今天的主题,图像 ...

  9. OpenCV中图像轮廓检测

    OpenCV中图像轮廓检测 通过之前的Canny方法可以得到图像的边界,但是我们无法得到边界的数学信息.所以就有了今天的图像轮廓检测. 在OpenCV中图像轮廓检测的API: findContours ...

最新文章

  1. 不服来战!多伦多大学教授500美元挑战整个机器学习圈子
  2. 各种格式的视频播放的代码(wma格式)
  3. 微型计算机的评估指标,T∕CECA-G 0060-2020 “领跑者”标准评价要求 微型计算机(9页)-原创力文档...
  4. about Ghost Solution Suite 2.5
  5. Linux之ubuntu的root无法连接FTP
  6. 判断一个点是否在三角形内
  7. 14行代码AC——习题5-4 交换学生(Foreign Exchange, UVa 10763)——解题报告
  8. tensorflow安装正确, import tf, the problem is Couldn't find field google.protob.ExtensionRange.options
  9. 关于各种JOIN连接的解释说明【原创】
  10. ios定位权限plist_iOS-info.plist 中添加定位权限
  11. ithoughts怎么自定义样式_微信小程序自定义导航栏组件封装
  12. 阿里iconfont图库官网网址
  13. java arraylist add时默认调用tostring_java中如何调用toString命名的方法?
  14. Alluxio部署(local模式)
  15. 使用 data URI scheme 在网页中内嵌图片[转]
  16. C语言中b lt a lt c,销售回收上海贝尔7360业务板NGLT-A-C, FGLT-A, FANT-F,FGLT-B
  17. PHP 如何使用Mobile Detect来判断访问网站的设备 安卓,平板,电脑
  18. Mysql之Specified key was too long; max key length is 767 bytes
  19. java浏览器无数据,JAVA实现文件下载,浏览器端失去数据没反应
  20. 时延、时间带宽积、RTT、利用率

热门文章

  1. 静物摄影用光技巧_室内人像摄影想要拍好,这3种用光技巧你了解吗?
  2. android发展的外文文献综述,android文献综述总结.docx
  3. linux内核线程绑定到单个核,linux 将进程或者线程绑定到指定的cpu上
  4. react获取id_解决React应用界面开发常见痛点(一)业务逻辑与UI分离
  5. 网页设计框架布局代码_网页设计中的分屏切割布局法
  6. 细数一行代码改变结局的炼丹骚操作
  7. Softmax(假神经网络)与词向量的训练
  8. Spring Boot使用@Async实现异步调用:ThreadPoolTaskScheduler线程池的优雅关闭
  9. 阿里Java架构师精通资料:性能优化+亿级并发架构汇总+架构选型
  10. 论文浅尝 | LGESQL: 结合线性有向图以及普通有向图的自然语言转换SQL语句模型...