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的Twisted框架实现一个简单的服务器
Apr 16 Python
Python os模块学习笔记
Jun 21 Python
python3 selenium 切换窗口的几种方法小结
May 21 Python
python3将视频流保存为本地视频文件
Jun 20 Python
tensorflow 中对数组元素的操作方法
Jul 27 Python
Python爬虫常用库的安装及其环境配置
Sep 19 Python
python微信公众号之关注公众号自动回复
Oct 25 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
Jun 19 Python
Python简易计算器制作方法代码详解
Oct 31 Python
pytorch实现focal loss的两种方式小结
Jan 02 Python
在django项目中导出数据到excel文件并实现下载的功能
Mar 13 Python
python爬虫实现获取下一页代码
Mar 13 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中的实现trim函数代码
2007/03/19 PHP
php操作excel文件 基于phpexcel
2010/07/02 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
2014/11/22 PHP
PHP微信红包API接口
2015/12/05 PHP
PHP多种序列化/反序列化的方法详解
2017/06/23 PHP
PHP实现通过CURL上传文件功能示例
2018/05/30 PHP
Javascript 二维数组
2009/11/26 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
引入autocomplete组件时JS报未结束字符串常量错误
2014/03/19 Javascript
使用AngularJS处理单选框和复选框的简单方法
2015/06/19 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
Vue框架里使用Swiper的方法示例
2018/09/20 Javascript
详解Vue依赖收集引发的问题
2019/04/22 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
Python 专题三 字符串的基础知识
2017/03/19 Python
Python实现针对给定单链表删除指定节点的方法
2018/04/12 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
Python序列对象与String类型内置方法详解
2019/10/22 Python
python实现获取单向链表倒数第k个结点的值示例
2019/10/24 Python
什么是python的函数体
2020/06/19 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
JOSEPH官网:英国奢侈时尚品牌
2018/01/31 全球购物
美国领先的低折扣旅行网站:Hotwire
2019/01/19 全球购物
LVMH旗下最大的奢侈品网站平台:24S
2020/05/24 全球购物
Unix里面如何在后台运行程序
2016/10/14 面试题
自荐信不宜过于夸大
2013/11/06 职场文书
关于中国梦的演讲稿
2014/04/23 职场文书
借款担保书范文
2014/05/13 职场文书
企业活动策划方案
2014/06/02 职场文书
入股合作协议书
2014/10/12 职场文书
报名委托书
2015/01/29 职场文书
婚庆开业庆典主持词
2015/06/30 职场文书
SQL IDENTITY_INSERT作用案例详解
2021/08/23 MySQL