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中的type()方法的使用
May 21 Python
Python常见格式化字符串方法小结【百分号与format方法】
Sep 18 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
Dec 04 Python
python数据抓取分析的示例代码(python + mongodb)
Dec 25 Python
用Python写一个模拟qq聊天小程序的代码实例
Mar 06 Python
python版百度语音识别功能
Jul 09 Python
Python3将数据保存为txt文件的方法
Sep 12 Python
Python shutil模块用法实例分析
Oct 02 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
Nov 07 Python
爬虫代理的cookie如何生成运行
Sep 22 Python
虚拟环境及venv和virtualenv的区别说明
Feb 05 Python
python图像处理 PIL Image操作实例
Apr 09 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 实现缩略图
2021/03/09 PHP
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
JQuery与JSon实现的无刷新分页代码
2011/09/13 Javascript
关于JavaScript中name的意义冲突示例介绍
2014/05/29 Javascript
Jquery中CSS选择器用法分析
2015/02/10 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
2015/06/24 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
遍历json获得数据的几种方法小结
2017/01/21 Javascript
ES5学习教程之Array对象
2017/04/01 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
使用Angular 6创建各种动画效果的方法
2018/10/10 Javascript
搭建一个nodejs脚手架的方法步骤
2019/06/28 NodeJs
详解mpvue实现对苹果X安全区域的适配
2019/07/31 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
vue路由切换之淡入淡出的简单实现
2019/10/31 Javascript
[43:35]TI4 循环赛第二日Liquid vs Fnatic
2014/07/11 DOTA
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
机器学习python实战之决策树
2017/11/01 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
深入了解Django View(视图系统)
2019/07/23 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
python的sys.path模块路径添加方式
2020/03/09 Python
python实现图像随机裁剪的示例代码
2020/12/10 Python
python字典与json转换的方法总结
2020/12/28 Python
高分子材料与工程专业推荐信
2013/12/01 职场文书
师范教师毕业鉴定
2014/01/13 职场文书
职业培训师职业生涯规划
2014/02/18 职场文书
2015年中学元旦晚会活动方案
2014/12/09 职场文书
《搭石》教学反思
2016/02/18 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
Nginx已编译的nginx-添加新模块
2021/04/01 Servers