API:

cv::findContours( //发现轮廓

InputOutputArray  binImg, // 输入图像,非0的像素被看成1,0的像素值保持不变,8-bit

OutputArrayOfArrays  contours,// 全部发现的轮廓对象,

//每个轮廓都是以点向量的形式进行存储即使用point类型的vector表示

OutputArray  hierachy// 可选的输出向量,包含了图像的拓扑信息,

//作为轮廓数量的表示hierarchy包含了很多元素,

//每个轮廓contours[i]对应hierarchy中hierarchy[i][0]~hierarchy[i][3],

//分别表示后一个轮廓,前一个轮廓,父轮廓,内嵌轮廓的索引,

//如果没有对应项,则相应的hierarchy[i]设置为负数。

int  mode, // 轮廓返回的模式 RETR_TREE

int  method,// 发现方法 CHAIN_APPROX_SIMPLE

Point  offset=Point()// 轮廓像素的位移,默认 Point(0, 0)没有位移 )

int  mode:

RETR_EXTERNAL:表示只检测最外层轮廓,对所有轮廓设置hierarchy[i][2]=hierarchy[i][3]=-1

RETR_LIST:提取所有轮廓,并放置在list中,检测的轮廓不建立等级关系 
RETR_CCOMP:提取所有轮廓,并将轮廓组织成双层结构(two-level hierarchy),顶层为连通域的外围边界,次层位内层边界 
RETR_TREE:提取所有轮廓并重新建立网状轮廓结构 
RETR_FLOODFILL:官网没有介绍,应该是洪水填充法

int  method:

CHAIN_APPROX_NONE:获取每个轮廓的每个像素,相邻的两个点的像素位置差不超过1 
CHAIN_APPROX_SIMPLE:压缩水平方向,垂直方向,对角线方向的元素,值保留该方向的重点坐标,如果一个矩形轮廓只需4个点来保存轮廓信息 
CHAIN_APPROX_TC89_L1和CHAIN_APPROX_TC89_KCOS使用Teh-Chinl链逼近算法中的一种

drawContours( //绘制轮廓

InputOutputArray binImg, // 输出图像

OutputArrayOfArrays contours,// 全部发现的轮廓对象

Int contourIdx// 轮廓索引号

const Scalar & color,// 绘制时候颜色

int thickness,// 绘制线宽

int lineType ,// 线的类型LINE_8

InputArray hierarchy,// 拓扑结构图

int maxlevel,// 最大层数, 0只绘制当前的,1表示绘制绘制当前及其内嵌的轮廓

Point offset=Point()// 轮廓位移,可选

实验步骤:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>using namespace std;
using namespace cv;Mat src, dst;
const char* output_win = "findcontours-demo";
int threshold_value = 100;
int threshold_max = 255;
RNG rng;
void Demo_Contours(int, void*);
int main(int argc, char** argv) {src = imread("D:/vcprojects/images/happyfish.png");if (src.empty()) {printf("could not load image...\n");return -1;}namedWindow("input-image", CV_WINDOW_AUTOSIZE);namedWindow(output_win, CV_WINDOW_AUTOSIZE);imshow("input-image", src);cvtColor(src, src, CV_BGR2GRAY);const char* trackbar_title = "Threshold Value:";createTrackbar(trackbar_title, output_win, &threshold_value, threshold_max, Demo_Contours);Demo_Contours(0, 0);waitKey(0);return 0;
}void Demo_Contours(int, void*) {Mat canny_output;vector<vector<Point>> contours;vector<Vec4i> hierachy;Canny(src, canny_output, threshold_value, threshold_value * 2, 3, false);findContours(canny_output, contours, hierachy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));dst = Mat::zeros(src.size(), CV_8UC3);RNG rng(12345);for (size_t i = 0; i < contours.size(); i++) {Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));drawContours(dst, contours, i, color, 2, 8, hierachy, 0, Point(0, 0));}imshow(output_win, dst);
}

opencv笔记二十九(轮廓发现)findContours(t2, contour, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));相关推荐

  1. opencv学习笔记二十九:SIFT特征点检测与匹配

    SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or corner points) ...

  2. 【OpenGL】笔记二十九、抗锯齿(MSAA)

    1. 流程 经过之前的教程,我们目前渲染出来的画面已经有了足够的表现力,但是还是有一些缺陷,比如当我们的渲染画面分辨率跟不上屏幕分辨率时,在我们渲染的图形边缘一些比较严重的锯齿效果就会显现: 自然,这 ...

  3. 嵌入式Linux驱动笔记(二十九)------内存管理之伙伴算法(Buddy)分析

    你好!这里是风筝的博客, 欢迎和我一起交流. 我们知道,在一个通用操作系统里,频繁申请内存释放内存都会出现一个非常著名的内存管理问题:内存碎片. 学过操作系统的都知道,有很多行之有效的方法(比如:记录 ...

  4. Mr.J-- jQuery学习笔记(二十九)--属性操作方法(获取属性判断)

    获取 attr() <span class="span1" name="it666"></span> <span class=&q ...

  5. C++语法学习笔记二十九: 详解decltype含义,decltype主要用途

    实例代码 // 详解decltype含义,decltype主要用途#include <iostream> #include <functional> #include < ...

  6. Linux学习笔记二十九——http服务

    基础概念: HTTP:Hyper Text Transfer Protocol 超文本传输协议 versions: HTTP/0.9:只接收GET一种请求方法,只支持纯文本 HTTP/1.0:支持PU ...

  7. 校友会小程序开发笔记二十九:小程序启动性能评测与优化(2)

    校友会小程序定位是大量校友的社交类应用,因此对于性能,用户体验,交互体验要求很高,对于小程序的打开,流畅性, 数据的渲染都必须做尽可能的优化 运行时性能 setData setData 是校友会小程序 ...

  8. OpenCV学习(二十) :分水岭算法:watershed()

    OpenCV学习(二十) :分水岭算法:watershed() 参考博客: OpenCV-分水岭算法 图像处理--分水岭算法 OpenCV学习(7) 分水岭算法(1) Opencv分水岭算法--wat ...

  9. 深度学习入门笔记(十九):卷积神经网络(二)

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

最新文章

  1. opencv可以在linux上运行,linux上 安装并 运行opencv
  2. 5G+云网融合,移动云带领开发者释放边缘计算的力量
  3. 麦肯锡全球调研160个案例,发布5个行业34个AI应用场景
  4. pugixml库的一个使用心得
  5. Nacos下载与安装-windows
  6. Android每周一个学习计划——RxJava2 0的学习使用
  7. 【Socket网络编程】7.以太网数据包、IP数据包、UDP数据包
  8. BUUCTF firmware
  9. java垃圾回收到老年代次数,Java垃圾回收之回收算法
  10. java 全局变量 跳出递归循环_Java技术知识点的一些总结
  11. 软件工程课, 编程课 助教的工作介绍
  12. boost operator 实例代码
  13. linux之dos2unix命令
  14. 普通话测试第四题评分标准_2017年普通话考试-评分细则
  15. OmniGraffle 7 Pro全新推出!V7.18.3(204.9.0)正式版 支持M1
  16. 华为交换机默认用户名密码bootrom密码
  17. ubuntu22.04编译opengl编程指南示例
  18. 网上商城的功能模块架构设计之(一)
  19. 利用Django创建简单app
  20. python软件如何下载-Python怎么下载安装

热门文章

  1. 一篇来自前端小白的学习成长总结
  2. PHP连接数据库MySQL打造xxx管理系统,实现简单的增删改查功能
  3. CBK精准扶贫走进广东省暨全国代理商大会圆满落幕
  4. Surely Vue Table表格css水印隐藏收集
  5. 我国1个都市圈,经过3次扩容,GDP超10万亿,成全国最大都市圈
  6. 安装 Tex Live (含镜像源更换)
  7. Nignx学习(二)
  8. CHIA(奇亚币)的常见问题解答
  9. Allegro5全屏切换
  10. 【深度相机系列七】深度相机应用全面梳理:多点开花,定点爆破