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自动调用IE打开某个网站的方法
Jun 03 Python
Python3中的真除和Floor除法用法分析
Mar 16 Python
python 根据正则表达式提取指定的内容实例详解
Dec 04 Python
详解python使用Nginx和uWSGI来运行Python应用
Jan 09 Python
Python 中字符串拼接的多种方法
Jul 30 Python
Python多线程编程之多线程加锁操作示例
Sep 06 Python
python清除字符串前后空格函数的方法
Oct 21 Python
python实现贪吃蛇小游戏
Mar 21 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
Mar 27 Python
详解Python连接MySQL数据库的多种方式
Apr 16 Python
Python 带星号(* 或 **)的函数参数详解
Feb 23 Python
python爬虫框架feapde的使用简介
Apr 20 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实现与ASP Banner组件相似的类
2006/10/09 PHP
php中在PDO中使用事务(Transaction)
2011/05/14 PHP
php生成略缩图代码
2012/07/16 PHP
php显示时间常用方法小结
2015/06/05 PHP
Apache启动报错No space left on device: AH00023该怎么解决
2015/10/16 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
2007/03/10 Javascript
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
nodejs实用示例 缩址还原
2010/12/28 NodeJs
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
JS实现光滑展开合拢的菜单效果代码
2015/09/16 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
JS中dom0级事件和dom2级事件的区别介绍
2016/05/05 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
vue.js开发环境搭建教程
2017/05/04 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
使用Angular自定义字段校验指令的方法示例
2019/02/01 Javascript
如何使用pm2快速将项目部署到远程服务器
2019/03/12 Javascript
javascript实现动态时钟的启动和停止
2020/07/29 Javascript
使用原生JS实现滚轮翻页效果的示例代码
2020/05/31 Javascript
[08:38]DOTA2-DPC中国联赛 正赛 VG vs Elephant 选手采访
2021/03/11 DOTA
Python自定义主从分布式架构实例分析
2016/09/19 Python
简单学习Python多进程Multiprocessing
2017/08/29 Python
Python读取excel中的图片完美解决方法
2018/07/27 Python
python全栈知识点总结
2019/07/01 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
放飞梦想演讲稿
2014/05/05 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
航空学院求职信
2014/06/11 职场文书
物业管理专业自荐信
2014/07/01 职场文书
党的群众路线教育实践活动心得体会范文
2014/11/05 职场文书
2015年幼儿园元旦游艺活动策划书
2014/12/09 职场文书
道德与公民自我评价
2015/03/09 职场文书
2015年法制宣传月活动总结
2015/03/26 职场文书
幼儿园教师教学反思
2016/03/02 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书