python 基于opencv 绘制图像轮廓


Posted in Python onDecember 11, 2020

图像轮廓概念

轮廓是一系列相连的点组成的曲线,代表了物体的基本外形。
谈起轮廓不免想到边缘,它们确实很像。简单的说,轮廓是连续的,边缘并不全都连续(下图)。其实边缘主要是作为图像的特征使用,比如可以用边缘特征可以区分脸和手;而轮廓主要用来分析物体的形态,比如物体的周长和面积等,可以说边缘包括轮廓。

python 基于opencv 绘制图像轮廓

寻找轮廓的操作一般用于二值图像,所以通常会使用阈值分割或Canny边缘检测先得到二值图。

注意:寻找轮廓是针对白色物体的,一定要保证物体是白色,而背景是黑色,不然很多人在寻找轮廓时会找到图片最外面的一个框。

opencv找出图像轮廓

使用cv.findContours()寻找轮廓:

import cv2 as cv
import numpy as np

img = cv.imread('j.png')
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(img_gray, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)

# 寻找二值图像的轮廓
contours, hierarchy = cv.findContours(
  thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)

print(len(contours))
  • 参数2:轮廓的查找方式,一般使用cv.RETR_TREE,表示提取所有的轮廓并建立轮廓间的层级。
  • 参数3:轮廓的近似方法。比如对于一条直线,我们可以存储该直线的所有像素点,也可以只存储起点和终点。使用cv.CHAIN_APPROX_SIMPLE就表示用尽可能少的像素点表示轮廓。
  • 简便起见,这两个参数也可以直接用真值3和2表示。
  • 函数有2个返回值,hierarchy是轮廓间的层级关系,这个不用理会。我们主要看contours,它就是找到的轮廓了,以链表形式存储,记录了每条轮廓的所有像素点的坐标(x,y)。

python 基于opencv 绘制图像轮廓

opencv绘制图像轮廓

轮廓找出来后,可以像图中那样用红色画出来:cv.drawContours()

cv.drawContours(img, contours, -1, (0, 0, 255), 2)
其中参数2就是得到的contours,参数3表示要绘制哪一条轮廓,-1表示绘制所有轮廓,参数4是颜色(B/G/R通道,所以(0,0,255)表示红色),参数5是线宽。

经验之谈:很多人画图时明明用了彩色,但没有效果,请检查你是在哪个图上画,画在灰度图和二值图上显然是没有彩色的。

一般情况下,我们会首先获得要操作的轮廓,再进行轮廓绘制及分析:
cnt = contours[1]
cv.drawContours(img, [cnt], 0, (0, 0, 255), 2)

实验:找出并绘制图像轮廓

import cv2 as cv
import numpy as np

img = cv.imread('jiao.jpg')
img_gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
ret, thresh = cv.threshold(img_gray, 0, 255, cv.THRESH_BINARY_INV + cv.THRESH_OTSU)

# 寻找二值图像的轮廓
contours, hierarchy = cv.findContours(
  thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
cnt = contours[1:6]

cv.drawContours(img, cnt, -1, (0, 0, 255), 2)

cv.imshow('result',img)
cv.waitKey(0)
cv.destroyAllWindows()

实验结果

python 基于opencv 绘制图像轮廓

以上就是python 基于opencv 绘制图像轮廓的详细内容,更多关于python 绘制图像轮廓的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中的文件和目录操作实现代码
Mar 13 Python
python实现的解析crontab配置文件代码
Jun 30 Python
Python中运行并行任务技巧
Feb 26 Python
python实现向ppt文件里插入新幻灯片页面的方法
Apr 28 Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
Nov 20 Python
python简单读取大文件的方法
Jul 01 Python
Python3.5.3下配置opencv3.2.0的操作方法
Apr 02 Python
pandas分区间,算频率的实例
Jul 04 Python
pandas分批读取大数据集教程
Jun 06 Python
python 实现性别识别
Nov 21 Python
python Matplotlib基础--如何添加文本和标注
Jan 26 Python
如何用 Python 制作一个迷宫游戏
Feb 25 Python
python通过cython加密代码
Dec 11 #Python
python 对象真假值的实例(哪些视为False)
Dec 11 #Python
Python排序函数的使用方法详解
Dec 11 #Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 #Python
python 自定义异常和主动抛出异常(raise)的操作
Dec 11 #Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
Dec 11 #Python
基于Python中Remove函数的用法讨论
Dec 11 #Python
You might like
php 保留字列表
2012/10/04 PHP
PHP递归调用的小技巧讲解
2013/02/19 PHP
PHP-FPM实现性能优化
2016/03/31 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
Javascript 验证上传图片大小[客户端]
2009/08/01 Javascript
jQuery获取Select选择的Text和Value(详细汇总)
2013/01/25 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
2014/12/18 NodeJs
JavaScript中的原型链prototype介绍
2014/12/30 Javascript
嵌入式iframe子页面与父页面js通信的方法
2015/01/20 Javascript
jquery实现图片左右切换的方法
2015/05/07 Javascript
BootStrap和jQuery相结合实现可编辑表格
2016/04/21 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
vue-cli如何添加less 以及sass
2017/07/06 Javascript
浅谈关于.vue文件中style的scoped属性
2017/08/19 Javascript
jQuery实现的鼠标拖动浮层功能示例【拖动div等任何标签】
2018/12/29 jQuery
微信小程序实现简易table表格
2020/06/19 Javascript
layer实现弹出层自动调节位置
2019/09/05 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
[36:43]NB vs Optic 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
Python2.x中文乱码问题解决方法
2015/06/02 Python
python比较两个列表是否相等的方法
2015/07/28 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
python使用bs4爬取boss直聘静态页面
2020/10/10 Python
python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
2021/01/30 Python
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
英国电器零售商:PRC Direct
2018/06/21 全球购物
彪马日本官网:PUMA日本
2019/01/31 全球购物
秋冬农业生产标语
2014/10/09 职场文书
感谢信的格式
2015/01/21 职场文书
庆六一开幕词
2015/01/29 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
python 定义函数 返回值只取其中一个的实现
2021/05/21 Python