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 cookielib 登录人人网的实现代码
Dec 19 Python
python模块restful使用方法实例
Dec 10 Python
Python实现读取目录所有文件的文件名并保存到txt文件代码
Nov 22 Python
python itchat实现微信自动回复的示例代码
Aug 14 Python
Python实现购物车购物小程序
Apr 18 Python
Mac下Anaconda的安装和使用教程
Nov 29 Python
Python多重继承之菱形继承的实例详解
Feb 12 Python
Django用户身份验证完成示例代码
Apr 03 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
Apr 10 Python
Python基于httpx模块实现发送请求
Jul 07 Python
PyQT5速成教程之Qt Designer介绍与入门
Nov 02 Python
方法汇总:Python 安装第三方库常用
Apr 26 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中this,self,parent的区别详解
2013/06/08 PHP
PHP判断一个字符串是否是回文字符串的方法
2015/03/23 PHP
PHP实现HTML页面静态化的方法
2015/11/04 PHP
深入理解PHP之OpCode原理详解
2016/06/01 PHP
php求今天、昨天、明天时间戳的简单实现方法
2016/07/28 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
javascript 写类方式之九
2009/07/05 Javascript
js截取字符串的两种方法及区别详解
2013/11/05 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
JS获取时间的相关函数及时间戳与时间日期之间的转换
2016/02/04 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
vue分页器组件编写方法详解
2019/06/28 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
python中的列表推导浅析
2014/04/26 Python
python开发之for循环操作实例详解
2015/11/12 Python
Python中的if、else、elif语句用法简明讲解
2016/03/11 Python
Python中struct模块对字节流/二进制流的操作教程
2017/01/21 Python
python模块之time模块(实例讲解)
2017/09/13 Python
Python 中字符串拼接的多种方法
2018/07/30 Python
Django用户认证系统 Web请求中的认证解析
2019/08/02 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
详解Python time库的使用
2019/10/10 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
python标准库os库的函数介绍
2020/02/12 Python
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
美国知名眼镜网站:Target Optical
2020/04/04 全球购物
澳大利亚女装精品店:Alannah Hill
2020/07/29 全球购物
意大利在线药房:Saninforma
2021/02/11 全球购物
运动会广播稿100字
2014/01/11 职场文书
销售求职信范文
2014/05/26 职场文书
国际会计专业求职信
2014/08/04 职场文书
MySQL into_Mysql中replace与replace into用法案例详解
2021/09/14 MySQL
Python实现抖音热搜定时爬取功能
2022/03/16 Python