Python OpenCV 基于图像边缘提取的轮廓发现函数

 更新时间:2021年03月25日 09:11:56   作者:梦想橡皮擦  
这篇文章主要介绍了Python OpenCV 基于图像边缘提取的轮廓发现函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

基础知识铺垫

在图像中,轮廓可以简单的理解为连接具有相同颜色的所有连续点(边界)的曲线,轮廓可用于形状分析和对象检测、识别等领域。

轮廓发现的原理:先通过阈值分割提取目标物体,再通过边缘检测提取目标物体轮廓。
一个轮廓就是一系列的点(像素),这些点构成了一个有序的点集合。

使用 cv2.findContours 函数可以用来检测图像的边缘。

函数原型说明

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

我使用的 Python OpenCV 是 4.0 以上版本,如果你使用的是 3.0 以上,可能存在返回值差异问题。
参数说明如下:

  • image:输入图像;
  • mode:轮廓检索模式,具体说明参见后文;
  • method:轮廓逼近方法,具体说明参加后文;
  • contours:返回的轮廓;
  • hierachy:每条轮廓对应的属性;
  • offset:每个轮廓点移动的可选偏移量。

备注:image 参数需要是二值图,而不是灰度图,返回结果是等高线和层次结构。

轮廓检索模式,有四种

  • cv2.RETR_EXTERNAL:表示只检测外轮廓;
  • cv2.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 个点来保存轮廓信息。
  • cv2.CHAIN_APPROX_TC89_L1cv2.CV_CHAIN_APPROX_TC89_KCOS:使用 teh-Chinl chain 近似算法(没寻找资料学习)。

了解上述内容之后,就可以应用轮廓发现函数了,代码如下:

import cv2 as cv

src = cv.imread("./both.jpeg")

gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(gray, 150, 255, 0)
cv.imshow("thresh",thresh)
# 寻找轮廓
contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)

轮廓发现之后,还要通过 cv2.drawContours 函数绘制轮廓,该函数原型如下:

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

参数说明如下:

  • image:输入图像;
  • contours:轮廓,在 Python 中是一个 list,就是 cv2.findContours 函数找出来的点集,一个列表;
  • contourIdx:轮廓的索引,指定绘制轮廓 list 中的哪条轮廓,要绘制所有轮廓,请传递-1;color:颜色;
  • thickness:厚度,如果是-1,表示填充;
  • lineType:线型;
  • hierarchy:层次结构的可选信息;
  • maxLevel:绘制轮廓的最大级别,0:仅绘制指定的轮廓,1:绘制轮廓和所有嵌套轮廓,2:绘制轮廓,所有嵌套轮廓,所有嵌套到嵌套的轮廓;
  • offset:轮廓偏移参数。

测试代码与运行结果如下:

import cv2 as cv
# help(cv.drawContours)
src = cv.imread("./both.jpeg")

gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(gray, 150, 255, 0)
cv.imshow("thresh",thresh)
# 寻找轮廓
contours, hierarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)

# print(contours)
# print(hierarchy)
# 绘制轮廓
cv.drawContours(src,contours,-1,(200,0,150),2)

cv.imshow('src',src)
cv.waitKey(0)

到此这篇关于Python OpenCV 基于图像边缘提取的轮廓发现函数的文章就介绍到这了,更多相关OpenCV 边缘提取轮廓 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在Windows中设置Python环境变量的实例讲解

    在Windows中设置Python环境变量的实例讲解

    下面小编就为大家分享一篇在Windows中设置Python环境变量的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python中tuple类型的使用

    Python中tuple类型的使用

    在Python中,元组(tuple)是一种不可变的序列类型,可以包含多个值,这些值可以是不同类型的,本文主要介绍了Python中tuple类型的使用,感兴趣的可以了解一下
    2023-12-12
  • 详解运行Python的神器Jupyter Notebook

    详解运行Python的神器Jupyter Notebook

    如果我们想要运行Python,就是在Python或者IPython的解释器环境中进行交互式运行,或者程序员最喜欢的编写.py文件,在文件中编写python代码,然后运行。如果想写一篇Python的文章,里面有代码,还希望代码在当前页面运行,那就是使用我们今天要介绍的Jupyter Notebook。
    2021-06-06
  • python多进程实现文件下载传输功能

    python多进程实现文件下载传输功能

    这篇文章主要为大家详细介绍了python多进程实现文件下载传输功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • PyTorch一小时掌握之神经网络分类篇

    PyTorch一小时掌握之神经网络分类篇

    这篇文章主要介绍了PyTorch一小时掌握之神经网络分类篇,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • Python pip安装第三方库的攻略分享

    Python pip安装第三方库的攻略分享

    pip 就是 Python 标准库(The Python Standard Library)中的一个包,只是这个包比较特殊,用它可以来管理 Python 标准库(The Python Standard Library)中其他的包。本文为大家介绍了pip安装第三方库的方法,需要的可以参考一下
    2022-11-11
  • Python计算序列相似度的算法实例

    Python计算序列相似度的算法实例

    这篇文章主要介绍了Python计算序列相似度的算法实例,求两个序列转换的最少交换步骤和最小交换距离,本文提供了部分实现代码与解决思路,对开发非常有帮助,需要的朋友可以参考下
    2023-07-07
  • 关于python中逆序的三位数

    关于python中逆序的三位数

    这篇文章主要介绍了关于python中逆序的三位数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Python实现聊天机器人的示例代码

    Python实现聊天机器人的示例代码

    这篇文章主要介绍了Python实现聊天机器人,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Flask中endpoint的理解(小结)

    Flask中endpoint的理解(小结)

    这篇文章主要介绍了Flask中endpoint的理解(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12

最新评论