Python+OpenCV图像处理——实现轮廓发现


Posted in Python onOctober 23, 2020

简介:轮廓发现是基于图像边缘提取的基础寻找对象轮廓的方法,所以边缘提取的阈值选定会影响最终轮廓发现结果。

代码如下:

import cv2 as cv
import numpy as np
def contours_demo(image):
  dst = cv.GaussianBlur(image, (3, 3), 0) #高斯模糊去噪
  gray = cv.cvtColor(dst, cv.COLOR_RGB2GRAY)
  ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU) #用大律法、全局自适应阈值方法进行图像二值化
  cv.imshow("binary image", binary)
  cloneTmage, contours, heriachy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
  for i, contour in enumerate(contours):
    cv.drawContours(image, contours, i, (0, 0, 255), 2)
    print(i)
  cv.imshow("contours", image)
  for i, contour in enumerate(contours):
    cv.drawContours(image, contours, i, (0, 0, 255), -1)
  cv.imshow("pcontours", image)
src = cv.imread('E:/imageload/coins.jpg')
cv.namedWindow('input_image', cv.WINDOW_NORMAL) #设置为WINDOW_NORMAL可以任意缩放
cv.imshow('input_image', src)
contours_demo(src)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果:

Python+OpenCV图像处理——实现轮廓发现

注意:

1.Opencv发现轮廓的函数原型为:findContours(image, mode, method[, contours[, hierarchy[, offset]]]) -> image, contours, hierarchy

image参数表示8位单通道图像矩阵,可以是灰度图,但更常用的是二值图像,一般是经过Canny、拉普拉斯等边缘检测算子处理过的二值图像。

mode参数表示轮廓检索模式:

①CV_RETR_EXTERNAL:只检测最外围轮廓,包含在外围轮廓内的内围轮廓被忽略。

②CV_RETR_LIST:检测所有的轮廓,包括内围、外围轮廓,但是检测到的轮廓不建立等级关系,彼此之间独立,没有等级关系,这就意味着这个检索模式下不存在父轮廓或内嵌轮廓。

③CV_RETR_CCOMP:检测所有的轮廓,但所有轮廓只建立两个等级关系,外围为顶层,若外围内的内围轮廓还包含了其他的轮廓信息,则内围内的所有轮廓均归属于顶层。

④CV_RETR_TREE:检测所有轮廓,所有轮廓建立一个等级树结构,外层轮廓包含内层轮廓,内层轮廓还可以继续包含内嵌轮廓。

method参数表示轮廓的近似方法:

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

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

③CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法。

contours参数是一个list,表示存储的每个轮廓的点集合。

hierarchy参数是一个list,list中元素个数和轮廓个数相同,每个轮廓contours[i]对应4个hierarchy元素hierarchy[i][0] ~hierarchy[i][3],分别表示后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号,如果没有对应项,则该值为负数。

offset参数表示每个轮廓点移动的可选偏移量。

2.Opencv绘制轮廓的函数原型为:drawContours(image, contours, contourIdx, color[, thickness[, lineType[, hierarchy[, maxLevel[, offset]]]]]) -> image

imgae参数表示目标图像。

contours参数表示所有输入轮廓。

contourIdx参数表示绘制轮廓list中的哪条轮廓, 如果是负数,则绘制所有轮廓。

color参数表示轮廓的颜色。

thickness参数表示绘制的轮廓线条粗细,如果是负数,则绘制轮廓内部。

lineType参数表示线型。

hierarchy参数表示有关层次结构的可选信息。

maxLevel参数表示绘制轮廓的最大级别。 如果为0,则仅绘制指定的轮廓。 如果为1,则该函数绘制轮廓和所有嵌套轮廓。 如果为2,则该函数绘制轮廓,所有嵌套轮廓,所有嵌套到嵌套的轮廓,等等。 仅当有可用的层次结构时才考虑此参数。

offset参数表示可选的轮廓偏移参数,该参数可按指定的方式移动所有绘制的轮廓。

以上就是Python+OpenCV图像处理——实现轮廓发现的详细内容,更多关于python 轮廓发现的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python实现同时给多个变量赋值的方法
Apr 30 Python
python中enumerate函数遍历元素用法分析
Mar 11 Python
详解python开发环境搭建
Dec 16 Python
python 类对象和实例对象动态添加方法(分享)
Dec 31 Python
Python enumerate索引迭代代码解析
Jan 19 Python
Python操作Sql Server 2008数据库的方法详解
May 17 Python
python numpy和list查询其中某个数的个数及定位方法
Jun 27 Python
对Python中DataFrame选择某列值为XX的行实例详解
Jan 29 Python
Python二元赋值实用技巧解析
Oct 25 Python
python给图像加上mask,并提取mask区域实例
Jan 19 Python
Python文本文件的合并操作方法代码实例
Mar 31 Python
Python如何脚本过滤文件中的注释
May 27 Python
python 带时区的日期格式化操作
Oct 23 #Python
Python可视化工具如何实现动态图表
Oct 23 #Python
python 匿名函数与三元运算学习笔记
Oct 23 #Python
Numpy中np.random.rand()和np.random.randn() 用法和区别详解
Oct 23 #Python
Python+OpenCV图像处理——实现直线检测
Oct 23 #Python
使用Python Tkinter实现剪刀石头布小游戏功能
Oct 23 #Python
Python 列表推导式需要注意的地方
Oct 23 #Python
You might like
php生成WAP页面
2006/10/09 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
2013/06/29 PHP
php 生成短网址原理及代码
2014/01/23 PHP
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
PHP并发查询MySQL的实例代码
2017/08/09 PHP
PHP环形链表实现方法示例
2017/09/15 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
js变量以及其作用域详解
2020/07/18 Javascript
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
js实现文本框中输入文字页面中div层同步获取文本框内容的方法
2015/03/03 Javascript
AngularJS实用开发技巧(推荐)
2016/07/13 Javascript
Easyui的组合框的取值与赋值
2016/10/28 Javascript
bootstrap vue.js实现tab效果
2017/02/07 Javascript
d3.js实现立体柱图的方法详解
2017/04/28 Javascript
详解vue-cli构建项目反向代理配置
2017/09/07 Javascript
微信小程序之GET请求的实例详解
2017/09/29 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
mpvue+vant app搭建微信小程序的方法步骤
2019/02/11 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
vue实现分页加载效果
2019/12/24 Javascript
JavaScript 异步时序问题
2020/11/20 Javascript
python妙用之编码的转换详解
2017/04/21 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
使用Python读取二进制文件的实例讲解
2018/07/09 Python
Python Tensor FLow简单使用方法实例详解
2020/01/14 Python
tensorflow 实现打印pb模型的所有节点
2020/01/23 Python
使用Django的JsonResponse返回数据的实现
2021/01/15 Python
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
创业计划书六个要素
2013/12/26 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
中学生的1000字检讨书
2014/10/11 职场文书
2015年出纳工作总结与计划
2015/05/18 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
Python数据分析入门之教你怎么搭建环境
2021/05/13 Python
浅谈pytorch中的dropout的概率p
2021/05/27 Python