点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

山区和地形图中海拔高的区域划出的线称为地形轮廓,它们提供了地形的高程图。这些线条可以手动绘制,也可以由计算机生成。在本文中,我们将看到如何使用OpenCV在简单图像上绘制轮廓线。

findContours函数:

OpenCV为我们提供了“ findContours”功能,该功能可在二进制图像中查找轮廓并将其存储为坐标点的小数数组。功能定义如下。

cv.findContours(image,mode,method[,contours[, hierarchy[,offset]]]) ->contours, hierarchy

image-源,一个8位单通道图像。非零像素被视为1。零像素保持为0,因此图像被视为二进制。
模式-轮廓检索模式。
方法-等高线近似方法。

轮廓检索模式:

第二个参数,即轮廓检索模式,用于检索图像中轮廓之间的关系。例如,在图

像中,轮廓内可能有轮廓,就像嵌套轮廓一样。在这种情况下,我们将外部轮廓称为父级,将内部轮廓称为子级。使用findContours函数时,应该检索轮廓之间的这些关系并将其存储在变量中。如果需要,将来也可以使用它们。OpenCV中有四种检索模式,分别是cv.RETR_LIST,cv.RETR_TREE,cv.RETR_CCOMP,cv.RETR_EXTERNAL。为了清楚了解检索模式,强烈建议参考OpenCV的轮廓轮廓官方教程。

轮廓近似法:

OpenCv中有两种轮廓逼近方法。它们是cv.CHAIN_APPROX_NONE和cv.CHAIN_APPROX_SIMPLE。如果通过cv.CHAIN_APPROX_NONE,则将存储轮廓的所有边界点。但是实际上,我们是否需要所有这些要点?例如,找到了一条直线的轮廓,是否需要线上的所有点来表示该线?事实并非如此,我们只需要该行的两个端点即可。这就是cv.CHAIN_APPROX_SIMPLE所做的。它删除所有冗余点并压缩轮廓,从而节省内存。

drawContours函数:

找到轮廓并将轮廓线的坐标点(x,y)存储在数组中后,我们可以使用这些点在图像上绘制轮廓线。我们使用OpenCV的drawContours函数执行相同的操作。

cv.drawContours(image,contours, contourIdx,color[,thickness[,lineType[, hierarchy[,maxLevel[,offset]]]]]) ->image

图像-目标图像。
轮廓-所有输入轮廓。每个轮廓都存储为点向量。
outlineIdx-指示要绘制的轮廓的参数。如果为负,则绘制所有轮廓。
颜色-颜色的轮廓。
粗细-绘制等高线的粗细。如果为负(例如,thickness = FILLED),则绘制轮廓内部。

原始图像:

import cv2 as cv
#read the image
img = cv.imread("D://medium_blogs//pattern1.jpg")
#convert the image to grayscale
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
#blur image to reduce the noise in the image while thresholding
blur = cv.blur(gray, (10,10))
#Apply thresholding to the image
ret, thresh = cv.threshold(blur, 1, 255, cv.THRESH_OTSU)
#find the contours in the image
contours, heirarchy = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
#draw the obtained contour lines(or the set of coordinates forming a line) on the original image
cv.drawContours(img, contours, -1, (0,255,0), 20)
#show the image
cv.namedWindow('Contours',cv.WINDOW_NORMAL)
cv.namedWindow('Thresh',cv.WINDOW_NORMAL)
cv.imshow('Contours', img)
cv.imshow('Thresh', thresh)
if cv.waitKey(0):cv.destroyAllWindows()

阈值图像和在其上绘制轮廓的原始图像如下: 

             

— — 完 — —

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

基于OpenCV实战:绘制图像轮廓(附代码)相关推荐

  1. 基于OpenCV实现的图像油画效果代码(高效率、低耗时的C++代码-带详细注释)

    油画的特点是其颜色值很有限,并且笔比较粗,所以我们要实现油画效果关键就是利用运算实现这两点. 本文实现的图像油画效果代码原理如下: 一.将原图进行灰度化处理后将灰度值线性压缩到0~level,得到图像 ...

  2. opencv 绘制图像轮廓

    图像轮廓概念 轮廓是一系列相连的点组成的曲线,代表了物体的基本外形. 谈起轮廓不免想到边缘,它们确实很像.简单的说,轮廓是连续的,边缘并不全都连续(下图).其实边缘主要是作为图像的特征使用,比如可以用 ...

  3. Python机器视觉--OpenCV进阶(核心)--图像轮廓查找识别,绘制图像轮廓与图像轮廓的面积周长计算

    1.图像轮廓查找识别与绘制图像轮廓 1.1 什么是图像轮廓 图像轮廓是具有相同颜色或灰度的连续点的曲线. 轮廓在形状分析和物体的检测和识别中很有用. 轮廓的作用: 用于图形分析 物体的识别和检测 注意 ...

  4. 【opencv】(6) 图像轮廓处理

    各位同学好,今天和大家分享一下opencv中如何获取图像轮廓,以及对轮廓的一些其他操作.内容有: (1)轮廓检测:cv2.findContours():(2)轮廓绘制:cv2.drawContours ...

  5. 【ML】基于机器学习的心脏病预测研究(附代码和数据集,多层感知机模型)

    写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大努力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. 之前创作过心脏病预测研究文章如下: [ML]基于机器学 ...

  6. 【ML】基于机器学习的心脏病预测研究(附代码和数据集,随机森林模型)

    写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大努力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. 之前创作过心脏病预测研究文章如下: [ML]基于机器学 ...

  7. 基于中科院-CASIA-GaitDatasetB步态图像轮廓数据库的步态周期检测与步态角度特征

    基于中科院-CASIA-GaitDatasetB步态图像轮廓数据库的步态周期检测与步态角度特征    由于最近研究的需要,开始将万恶的双手伸向了人体下肢步态(如步态周期检测.步态特征提取.步态相的划分 ...

  8. php配置辨别图片形式,基于OpenCV的PHP图像人脸辨别技术(转载)

    当前位置:我的异常网» 图形/图像 » 基于OpenCV的PHP图像人脸辨别技术(转载) 基于OpenCV的PHP图像人脸辨别技术(转载) www.myexceptions.net  网友分享于:20 ...

  9. 【ML】基于LSTM的心脏病预测研究(附代码和数据集,系列1)

    写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大努力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌. 之前创作过心脏病预测研究文章如下: [ML]基于机器学 ...

最新文章

  1. if语句 power query_PowerQuery学习:认识M函数
  2. 【已解决】Linux下安装JDK
  3. 基于Elasticsearch实现搜索推荐
  4. 将亚型多态性与通用多态性相关联的危险
  5. Ubuntu+Win7+Samba实现文件共享
  6. Java二叉查找树最简单实现
  7. Egret和LayaBox
  8. Adding Powers
  9. 开发部门现在存在的一些问题
  10. oracle 关闭归档,Oracle归档的开启和关闭
  11. 华为OD机考 2022
  12. 股指期货、股指期权与股票有何不同?
  13. Flink 系例 之 CountWindowAll
  14. Mysql安装文件夹下找不到my.ini文件怎么办?如何创建my.ini文件
  15. transparent(指定透明度)使用方法
  16. 想要学好C++,必看,能看完,证明你有学习C++的潜质,否则趁早放弃
  17. 双系统如何远程切换设置
  18. 机器人 郑佳佳_浙大硕士造了个充气娃娃 和她结婚了
  19. 【日语论文】新干线对日本旅游业发展的影响-以秋田新干线为例(节选)
  20. 哔哩哔哩用户数据采集及数据分析

热门文章

  1. 加速电子化报销费控服务,易快报完成1500万美元B轮融资
  2. 腾讯 AI Lab 开源业内最大规模多标签图像数据集
  3. 李飞飞团队最新论文:如何对图像中的实体精准“配对”?
  4. 从FPN到Mask R-CNN,一文告诉你Facebook的计算机视觉有多强
  5. mybatis-plus团队新作:mybatis-mate 轻松搞定数据权限
  6. 阿里巴巴为什么不建议直接使用 Async 注解?
  7. 聊一聊如何优雅地向程序员提问题
  8. 保姆级NLP学习路线来啦!
  9. 深度学习环境配置指南!(Windows、Mac、Ubuntu全讲解)
  10. PNAS顶刊文:情侣分手3个月前就有预兆!聊天记录还能反映分手后遗症