Opencv—利用findContours函数找圆环,并标出(简单层级)
前言
这样一张图片,如何在图像中找到圆环并标出呢?
一、利用findContours函数
函数中的第三个参数,hierarchy,定义为“vector< Vec4i > hierarchy”,是一个能表示层级关系的附加参数,定义为:hierarchy[i][0]表示同级的下一个轮廓的索引号,hierarchy[i][1]表示同级的上一个轮廓的索引号,hierarchy[i][2]表示第一个内部轮廓的索引号,hierarchy[i][3]表示外部轮廓的索引号。因此,通过这些轮廓关系可以找到图片中的最里面的圆,然后再找外圈圆,代码如下:
二、实现代码
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(src, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point());
Mat imageContours = Mat::zeros(src.size(), CV_8UC1);
Mat imageContours1 = Mat::zeros(src.size(), CV_8UC1);for (int i = 0; i < contours.size(); i++) {//找到最里圆的内轮廓if (hierarchy[i][2] == -1) { innerIndexs.push_back(i);int fIndex = hierarchy[i][3]; //这层是最里圆的外轮廓secondIndexs.push_back(hierarchy[fIndex][3]); //这层是外圆的内轮廓}
}//画出里圆
for (auto & i : innerIndexs) {drawContours(imageContours, contours, i, Scalar(255), FILLED);
}//画出外圆
for (auto & i : secondIndexs) {drawContours(imageContours1, contours, i, Scalar(255), FILLED);
}//获取圆环
Mat dst;
bitwise_xor(imageContours1, imageContours, dst);
三、结果
其它
有意思的是,同样的代码对于白底黑边的图的结果不一样。
src:
dst:
我大概看了下,这种背景颜色的图返回的层级关系是乱的,所以,我的处理方式是先对原图取反,另外,大家还有没有其它更好的方法,可以分享一下。
bitwise_not(src, src);
Opencv—利用findContours函数找圆环,并标出(简单层级)相关推荐
- opencv cv.findContours 函数详解
函数 cv.findContours contours, hierarchy = cv.findContours( image, mode, method[, contours[, hierarchy ...
- OpenCV中findContours函数的使用
http://blog.csdn.net/corcplusplusorjava/article/details/20536251 转载于:https://www.cnblogs.com/gaohai/ ...
- 【图像处理】——Python+opencv实现二值图像的轮廓边界跟踪以及轮廓面积周长的求解(findcontours函数和contourArea函数)
目录 一.函数 cv.findContours 二.轮廓层级(返回参数hierarchy) 三.轮廓寻找方式 1. RETR_LIST 2. RETR_TREE 3. RETR_EXTERNAL 4. ...
- 查找字符串末尾含关键字_EXCEL函数公式大全之利用FIND函数和RIGHT函数LEN函数取末尾字符...
EXCEL函数公式大全之利用FIND函数和RIGHT函数LEN函数从字符串末尾取出指定长度的字符,从字符串中取出销售员的姓名.EXCEL函数与公式在工作中使用非常的频繁,会不会使用公式直接决定了我们的 ...
- opencv 利用图像轮廓函数填充圆环内部 图像轮廓函数应用小例子
实验: import cv2 as cv import numpy as np# 1.读入圆环 img = cv.imread('circle_ring.jpg') img_gray = cv.cvt ...
- C++opencv找圆心?看着一篇,一定有你要(边缘轮廓检测,拟合,凸包)找出相应的轮廓或者全部轮廓画外界圆轮廓并且标出轮廓中心
一,利用面积对轮廓进行筛选 注意这种面积筛选有一个弊端就是比如有两个轮廓, A轮廓为500 B轮廓为300 当面积设置为 area<400时就可以筛选出面积小于300的所有轮廓 反之大于300的 ...
- opencv 利用轮廓检索函数实现字母匹配(图像匹配)
在待识别图像上找到模板图像 待识别图像: 模板图像: 识别原理 1. 将待识别图像 -> 灰度图像 -> 二值图像 2. 通过轮廓检索函数 cv.findContours 找到待识别图像所 ...
- OpenCV findContours函数参数
目录 OpenCV findContours函数参数 python检测外轮廓: c++轮廓检测: 一.mode取值"CV_RETR_EXTERNAL",method取值" ...
- 利用OpenCV的findContours作轮廓检测
图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 问: 边缘检测与轮廓检测有什么区别? 边缘检测是 ...
- python-opencv2利用cv2.findContours()函数来查找检测物体的轮廓
轮廓检测 轮廓检测也是图像处理中经常用到的.OpenCV-Python接口中使用cv2.findContours()函数来查找检测物体的轮廓. 实现 使用方式如下: import cv2 img ...
最新文章
- 专业介绍Linux中的进程管理
- Qt Creator使用语言服务器
- pycharm在401跑程序需要每个py文件加一句
- 在oracle下我们如何正确的执行数据库恢复
- 常用类一一枚举类一一定义和调用
- WPF 实现动态Windows桌面壁纸~
- GitHub 2019年度报告,用户超4000万
- Apache Camel 2.12 –支持后退,以减少较积极的轮询路线
- MapReduce:处理数据密集型文本处理–局部聚合第二部分
- mysql的jar包文件在哪找_java连接mysql要导入的jar包在哪。
- Android Stadio(3)---使用fbc快捷键快速生成findViewById
- 【机器学习】图解最常用的10个机器学习算法!
- gvim 常用命令
- php之mysql(数据库的连接)出错问题及解决,cmd操作数据库失败
- atitit.导出excel的设计----查询结果 导出为excel的实现java .net php 总结
- Python进行停用词表去重
- 惠普局域网共享打印机设置_打印机usb转网络?打印机共享怎么设置?怎样设置hp打印机共享器操作方法...
- ido 0.5 发布
- 工作台式计算机配置单,台式电脑配置清单.doc
- 【宽创热点】为什么博物馆要展示古代糕点和比基督更古老的牛肉