图像轮廓概念

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

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

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

opencv找出图像轮廓

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

import cv2 as cv
import numpy as npimg = 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)。

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 npimg = 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()

实验结果

opencv 绘制图像轮廓相关推荐

  1. opencv 利用图像轮廓函数填充圆环内部 图像轮廓函数应用小例子

    实验: import cv2 as cv import numpy as np# 1.读入圆环 img = cv.imread('circle_ring.jpg') img_gray = cv.cvt ...

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

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

  3. OpenCV中图像轮廓检测

    OpenCV中图像轮廓检测 通过之前的Canny方法可以得到图像的边界,但是我们无法得到边界的数学信息.所以就有了今天的图像轮廓检测. 在OpenCV中图像轮廓检测的API: findContours ...

  4. OpenCV检测图像轮廓

    轮廓只不过是图像中连接的曲线,或者图像中连通部分的边界,轮廓通常以图像中的边缘来计算,但是,边缘和轮廓的区别在于轮廓是闭合的,而边缘可以是任意的.边缘的概念局限于点及其邻域像素,轮廓将目标作为整体进行 ...

  5. Python+OpenCV:图像轮廓

    Python+OpenCV:图像轮廓 轮廓是什么? 轮廓可以简单地解释为一条连接所有连续点(沿边界)的曲线,具有相同的颜色和强度. 轮廓线是形状分析.目标检测和识别的重要工具. 为了获得更好的精度,可 ...

  6. 基于OpenCV实战:绘制图像轮廓(附代码)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 山区和地形图中海拔高的区域划出的线称为地形轮廓,它们提供了地形的高 ...

  7. 毛星云opencv之8.4.4查找和绘制图像轮廓矩

    #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #i ...

  8. 我的Qt作品(7)使用Qt+OpenCV实现图像轮廓提取,再用三阶贝塞尔曲线拟合成光滑线条/多边形拟合

    一.贝塞尔曲线基础知识 给一系列顶点,如果只是用直线将其中的各个点依次连接起来,最终形成一个折线图,这种很容易实现.但是现实中事物的变化往往具有连续的特性,即使是给定了一系列离散的点,基于以往的生活经 ...

  9. canvas绘制图像轮廓效果

    在2d图形可视化开发中,经常要绘制对象的选中效果. 一般来说,表达对象选中可以使用边框,轮廓或者发光的效果.  发光的效果,可以使用canvas的阴影功能,比较容易实现,此处不在赘述. 绘制边框 绘制 ...

最新文章

  1. R语言与数据分析(8)-获取帮助
  2. 转载:如何快速转载CSDN及博客园中的博客
  3. CF1392G-Omkar and Pies【dp】
  4. 2015年4月27日---C语言:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!...
  5. Kali Linux 秘籍 第六章 漏洞利用
  6. 已经人均5G了?5G手机没人买,iPhone 11没5G该不该被嘲讽?
  7. 小米上市 365 天:雷军的坚守与败退
  8. 黑龙江省计算机应用能力考试,2020黑龙江省一级计算机基础及MS Office应用考试在线自测试题库(不限设备,登陆即可做题)...
  9. Gallery和BaseAdapter容器
  10. asp绑定gridview属性_《ASP.ENT Core与RESTful API开发实战》(第3章)中
  11. python编写函数模拟内置函数sorted_Python 内置函数sorted()在高级用法
  12. Android基础教程(奋斗之小鸟)_PDF 电子书
  13. arm 汇编指令 CPS
  14. 激励视频广告 Android,激励视频广告
  15. Qtum量子链发布QIP-7:Qtum虚拟机升级,五大更新全面提升开发性能
  16. android 应用性能监控软件,App性能监控工具
  17. char* char[] char** char*[] char[][]详解
  18. php启动 大量sess文件,关于PHP中Session文件过多的有关问题
  19. 中国移动首次明确的LTE终端频率要求
  20. python爬虫文献综述_Python爬虫入门(1):综述

热门文章

  1. python怎么读取中文文件-Python中使用不同编码读写txt文件详解
  2. 传统语音识别(GMM+HMM)
  3. nvm切换node版本的命令
  4. Redis--五种基础数据结构及应用场景
  5. php用手机摇一摇,H5做出手机摇一摇功能的实现步骤
  6. LeetCode 647 回文子串
  7. servlet向ajax传递数据库,一、JSP、servlet、SQL三者之间的数据传递(前台与后台数据交互)...
  8. 博思得标签打印机驱动_惠普LaserJet 5200n驱动-惠普HP LaserJet 5200n打印机驱动下载 v61.074.561.43官方版...
  9. Linux中设置Git显示颜色
  10. HTML5几大新特性