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 self,cls,decorator的理解
Jul 13 Python
python编写简单爬虫资料汇总
Mar 22 Python
详解Python3的TFTP文件传输
Jun 26 Python
Python Django基础二之URL路由系统
Jul 18 Python
Python项目 基于Scapy实现SYN泛洪攻击的方法
Jul 23 Python
Django自定义用户表+自定义admin后台中的字段实例
Nov 18 Python
Python的几种主动结束程序方式
Nov 22 Python
django框架forms组件用法实例详解
Dec 10 Python
Python json模块与jsonpath模块区别详解
Mar 05 Python
Django模板获取field的verbose_name实例
May 19 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
Jun 18 Python
python中加背景音乐如何操作
Jul 19 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
MySQL相关说明
2007/01/15 PHP
PHP MemCached高级缓存配置图文教程
2010/08/05 PHP
php数据库密码的找回的步骤
2011/01/12 PHP
php导入导出excel实例
2013/10/25 PHP
JS异常处理try..catch语句的作用和实例
2014/05/05 PHP
php实现监控varnish缓存服务器的状态
2014/12/30 PHP
PHP基于GD库实现的生成图片缩略图函数示例
2017/07/05 PHP
JavaScript面向对象之静态与非静态类
2010/02/03 Javascript
解析JavaScript中instanceof对于不同的构造器或许都返回true
2013/12/03 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
Javascript基础教程之函数对象和属性
2015/01/18 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
H5实现中奖记录逐行滚动切换效果
2017/03/13 Javascript
webpack独立打包和缓存处理详解
2017/04/03 Javascript
Mac中安装nvm的教程分享
2017/12/11 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
Element图表初始大小及窗口自适应实现
2020/07/10 Javascript
[02:09]EHOME夺得首届辉夜杯冠军—现场颁奖仪式
2015/12/28 DOTA
[01:08:56]DOTA2-DPC中国联赛 正赛 Magma vs LBZS BO3 第一场 2月7日
2021/03/11 DOTA
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
基于python log取对数详解
2018/06/08 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
2021/01/01 Python
Python 调用C++封装的进一步探索交流
2021/03/04 Python
全球知名的珠宝首饰品牌:Kay Jewelers
2018/02/11 全球购物
个人自我评价分享
2013/12/20 职场文书
幼儿园家长评语大全
2014/04/16 职场文书
社会实践活动总结范文
2014/07/03 职场文书
村安全生产责任书
2014/08/25 职场文书
2015年党员岗位承诺书
2015/04/27 职场文书
《灰雀》教学反思
2016/02/19 职场文书