本文目的

目的:学习使用opencv的findContours和drawContours函数
语言:java
版本:opencv-410
简介:通过findContours函数检测物体轮廓,并且用drawContours画出来
程序支持效果:
加载图片后可以在界面上更改三个参数进行效果对比查看

  • 1.修改边缘检测阈值,改变边缘检测效果
  • 2.修改轮廓检索模式
  • 3.修改轮廓的近似模式

分解介绍

函数:findContours

findContours

参数介绍

  • 第一个参数:image:单通道图像矩阵,可以是灰度图,但更常用的是二值图像,一般是经过Canny、拉普拉斯等边缘检测算子处理过的二值图像;
  • 第二个参数:contours,定义为“vector> contours”,是一个向量,并且是一个双重向量,向量内每个元素保存了一组由连续的Point点构成的点的集合的向量,每一组Point点集就是一个轮廓。有多少轮廓,向量contours就有多少元素。
  • 第三个参数:存储了检出的轮廓层级结构,具体学习参考别人的文档:https://blog.csdn.net/qq_33810188/article/details/81285867?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task
  • 第四个参数:int型的mode,定义轮廓的检索模式:
  • RETR_EXTERNAL:只检测最外围轮廓,包含在外围轮廓内的内围轮廓被忽略
  • RETR_LIST :检测所有的轮廓,包括内围、外围轮廓,但是检测到的轮廓不建立等级关系,彼此之间独立,没有等级关系,这就意味着这个检索模式下不存在父轮廓或内嵌轮廓
  • RETR_CCOMP: 检测所有的轮廓,但所有轮廓只建立两个等级关系,外围为顶层,若外围内的内围轮廓还包含了其他的轮廓信息,则内围内的所有轮廓均归属于顶层
  • RETR_TREE:检测所有轮廓,所有轮廓建立一个等级树结构。外层轮廓包含内层轮廓,内层轮廓还可以继续包含内嵌轮廓。
  • 第五个参数:int型的method,定义轮廓的近似方法:
  • CHAIN_APPROX_NONE:保存物体边界上所有连续的轮廓点到contours向量内
  • CHAIN_APPROX_SIMPLE:仅保存轮廓的拐点信息,把所有轮廓拐点处的点保存入contours向量内,拐点与拐点之间直线段上的信息点不予保留
  • CHAIN_APPROX_TC89_L1CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法
  • 第六个参数:Point偏移量,所有的轮廓信息相对于原始图像对应点的偏移量,相当于在每一个检测出的轮廓点上加上该偏移量,并且Point还可以是负值!

函数:drawContours

drawContours

参数介绍

  • 第一个参数image表示目标图像,
  • 第二个参数contours表示输入的轮廓组,每一组轮廓由点vector构成,
  • 第三个参数contourIdx指明画第几个轮廓,如果该参数为负值,则画全部轮廓,
  • 第四个参数color为轮廓的颜色,
  • 第五个参数thickness为轮廓的线宽,如果为负值或CV_FILLED表示填充轮廓内部,
  • 第六个参数lineType为线型,
  • 第七个参数为轮廓结构信息,
  • 第八个参数为maxLevel
  • 第九个参数为偏移量

程序步骤

以下是程序的核心步骤:

  • 加载本地图片
String 

  • 灰度变换
//灰度变换

  • 滤波处理
//滤波处理

  • 边缘检测
Mat 

  • 轮廓检测
Imgproc

  • 轮廓检测结果的绘画
Mat 

代码

package 

效果

效果1

轮廓检索模式为RETR_EXTERNEL,只检测最外围轮廓,包含在外围轮廓内的内围轮廓被忽略

效果2

轮廓检索模式为RETR_TREE,检索出所有的轮廓

其他效果操作程序可以看到有所不同

findcontours函数_opencv轮廓findContoursamp;drawContours相关推荐

  1. OpenCV findContours函数参数

    目录 OpenCV findContours函数参数 python检测外轮廓: c++轮廓检测: 一.mode取值"CV_RETR_EXTERNAL",method取值" ...

  2. 【图像处理】——Python+opencv实现二值图像的轮廓边界跟踪以及轮廓面积周长的求解(findcontours函数和contourArea函数)

    目录 一.函数 cv.findContours 二.轮廓层级(返回参数hierarchy) 三.轮廓寻找方式 1. RETR_LIST 2. RETR_TREE 3. RETR_EXTERNAL 4. ...

  3. python-opencv2利用cv2.findContours()函数来查找检测物体的轮廓

    轮廓检测 轮廓检测也是图像处理中经常用到的.OpenCV-Python接口中使用cv2.findContours()函数来查找检测物体的轮廓. 实现 使用方式如下: import cv2   img ...

  4. findContours函数

    1.findContours函数 函数的作用: 查找图像的轮廓 2.findContours函数,这个函数的原型为: void findContours(InputOutputArray image, ...

  5. python opencv轮廓检测_OpenCV 轮廓检测的实现方法

    轮廓概述 轮廓可以简单认为成将连续的点(连着边界)连在一起的曲线,具有相同的颜色或者灰度.轮廓在形状分析和物体的检测和识别中很有用. 为了更加准确,要使用二值化图像.在寻找轮廓之前,要进行阈值化处理或 ...

  6. Imgproc.findContours函数

    //**************************************************************** 转载于http://www.cnblogs.com/chenjia ...

  7. opencv cv.findContours 函数详解

    函数 cv.findContours contours, hierarchy = cv.findContours( image, mode, method[, contours[, hierarchy ...

  8. findContours函数详细解析

    1: image, cnts, hierarchy = cv2.findContours(a,b,c)//寻找图形中的轮廓 传入的参数:a:传入的图像(二值化图像)b:轮廓的检索模式,一般是检测外轮廓 ...

  9. findContours函数报错:“将一个无效参数传递给了将无效参数视为严重错误的函数”解决方案之一

    在使用findContours函数时,release可以通过,debug一直在报错:"将一个无效参数传递给了将无效参数视为严重错误的函数". 这里有个大牛汇集的好多种解决方法: h ...

最新文章

  1. bzoj 4711 小奇挖矿 ——“承诺”类树形dp
  2. 5.6 SMO-机器学习笔记-斯坦福吴恩达教授
  3. TF之DCGAN:基于TF利用DCGAN测试自己的数据集并进行生成过程全记录
  4. Atlas学习手记(9):异步调用Page Method
  5. 程序以html形式发送邮件注意问题
  6. 如何注释ascx中的代码
  7. MYSQL查询近一年 近一月 近一周 今天数据 没有数据返回0 按时间有序返回数据
  8. Java提高性能的50个优化,记得收藏
  9. HDFS 纠删码 EC
  10. iOS 实现时间线列表效果
  11. 凹多边形三角剖分算法实现---基于Unity3D
  12. Android连接USB打印机
  13. 3dB带宽的简要解释
  14. antd-select拼音首字母模糊查询
  15. 听课笔记-名校启程大学规划课
  16. 程序员的爱情 第十七章
  17. Python图像锐化及边缘检测(Roberts、Prewitt、Sobel、Lapllacian、Canny、LOG)
  18. 通过ELO机制衡量各类对弈活动水平
  19. 原生js完成拼图小游戏
  20. Android 上手机跟机顶盒应用开发的区别

热门文章

  1. bootstrapDialog插件集成datatables插件遇到的异常
  2. Linux6.x修改出eth0网卡的解决方法
  3. Python - Sublime Text 3 控制台不能输出中文的解决方法
  4. gulp压缩js转义es6的常见错误及解决方案
  5. 虚拟机忘记密码解决方法
  6. Web离线应用解决方案——ServiceWorker
  7. 使用Redis分布式锁处理并发,解决超卖问题
  8. 如何指定在Git上执行shell命令时使用的私有SSH密钥?
  9. css中em单位详解,说明
  10. Weex控制Android返回键解决方案