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 相关文章推荐
Windows系统下安装Python的SSH模块教程
Feb 05 Python
python编程开发之日期操作实例分析
Nov 13 Python
Google开源的Python格式化工具YAPF的安装和使用教程
May 31 Python
Python 装饰器使用详解
Jul 29 Python
python队列queue模块详解
Apr 27 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
Sep 04 Python
Python实现非正太分布的异常值检测方式
Dec 09 Python
python实现在一个画布上画多个子图
Jan 19 Python
Python datetime模块使用方法小结
Jun 18 Python
python pip如何手动安装二进制包
Sep 30 Python
python中turtle库的简单使用教程
Nov 11 Python
如何利用python 读取配置文件
Jan 06 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
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
PHP+DBM的同学录程序(2)
2006/10/09 PHP
构建简单的Webmail系统
2006/10/09 PHP
php使用GeoIP库实例
2014/06/27 PHP
PHP SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
php项目开发中用到的快速排序算法分析
2016/06/25 PHP
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
2011/10/29 Javascript
js弹出的对话窗口永远保持居中显示
2012/12/15 Javascript
Javascript计算两个marker之间的距离(Google Map V3)
2013/04/26 Javascript
JavaScript中使用Object.create()创建对象介绍
2014/12/30 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
Form表单上传文件(type="file")的使用
2017/08/03 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
详解一个基于套接字实现长连接的express
2019/03/28 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
Vue的路由及路由钩子函数的实现
2019/07/02 Javascript
js将URL网址转为16进制加密与解密函数
2020/03/04 Javascript
[01:13:17]Secret vs NB 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python实现遍历目录的方法【测试可用】
2017/03/22 Python
Python正则表达式知识汇总
2017/09/22 Python
python实现字符串中字符分类及个数统计
2018/09/28 Python
Python调用jar包方法实现过程解析
2020/08/11 Python
Python生成pdf目录书签的实例方法
2020/10/29 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
利用CSS3动画实现圆圈由小变大向外扩散的效果实例
2018/09/10 HTML / CSS
美国亚马逊旗下时尚女装网店:SHOPBOP(支持中文)
2020/10/17 全球购物
小学生我的梦想演讲稿
2014/08/21 职场文书
民用住房租房协议书
2014/10/29 职场文书
公司副总经理岗位职责
2015/04/08 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
Python内置数据类型中的集合详解
2022/03/18 Python
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL
Redis基本数据类型哈希Hash常用操作命令
2022/06/01 Redis