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中函数的参数传递与可变长参数介绍
Jun 30 Python
python清除指定目录内所有文件中script的方法
Jun 30 Python
python 循环while和for in简单实例
Aug 16 Python
python递归删除指定目录及其所有内容的方法
Jan 13 Python
Python学习小技巧之利用字典的默认行为
May 20 Python
Flask核心机制之上下文源码剖析
Dec 25 Python
Python 字符串、列表、元组的截取与切片操作示例
Sep 17 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
Feb 18 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
Apr 08 Python
Python基于jieba, wordcloud库生成中文词云
May 13 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
Nov 27 Python
python爬虫scrapy框架的梨视频案例解析
Feb 20 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 面试碰到过的问题 在此做下记录
2011/06/09 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
2012/12/06 PHP
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
PHP使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
php中unserialize返回false的解决方法
2014/09/22 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
微信公众号实现会员卡领取功能
2017/06/08 PHP
php记录搜索引擎爬行记录的实现代码
2018/03/02 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
javascript 拖放效果实现代码
2010/01/22 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
JS实现闪动的title消息提醒效果
2014/06/20 Javascript
仿百度联盟对联广告实现代码
2014/08/30 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
2015/08/03 Javascript
js实现超简单的展开、折叠目录代码
2015/08/28 Javascript
微信小程序 loading 详解及实例代码
2016/11/09 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
puppeteer实现html截图的示例代码
2019/01/10 Javascript
js中arguments对象的深入理解
2019/05/14 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
python里将list中元素依次向前移动一位
2014/09/12 Python
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
对python中Librosa的mfcc步骤详解
2019/01/09 Python
python集合常见运算案例解析
2019/10/17 Python
Python 忽略文件名编码的方法
2020/08/01 Python
财务会计专业个人求职信范本
2014/01/08 职场文书
经济职业学院毕业生自荐书
2014/03/17 职场文书
技术股东合作协议书
2014/12/02 职场文书
个人自荐书范文
2015/03/09 职场文书
部门2015年度工作总结
2015/04/29 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
幼儿园亲子活动感想
2015/08/07 职场文书