opencv笔记二十九(轮廓发现)findContours(t2, contour, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));
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));相关推荐
- opencv学习笔记二十九:SIFT特征点检测与匹配
SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or corner points) ...
- 【OpenGL】笔记二十九、抗锯齿(MSAA)
1. 流程 经过之前的教程,我们目前渲染出来的画面已经有了足够的表现力,但是还是有一些缺陷,比如当我们的渲染画面分辨率跟不上屏幕分辨率时,在我们渲染的图形边缘一些比较严重的锯齿效果就会显现: 自然,这 ...
- 嵌入式Linux驱动笔记(二十九)------内存管理之伙伴算法(Buddy)分析
你好!这里是风筝的博客, 欢迎和我一起交流. 我们知道,在一个通用操作系统里,频繁申请内存释放内存都会出现一个非常著名的内存管理问题:内存碎片. 学过操作系统的都知道,有很多行之有效的方法(比如:记录 ...
- Mr.J-- jQuery学习笔记(二十九)--属性操作方法(获取属性判断)
获取 attr() <span class="span1" name="it666"></span> <span class=&q ...
- C++语法学习笔记二十九: 详解decltype含义,decltype主要用途
实例代码 // 详解decltype含义,decltype主要用途#include <iostream> #include <functional> #include < ...
- Linux学习笔记二十九——http服务
基础概念: HTTP:Hyper Text Transfer Protocol 超文本传输协议 versions: HTTP/0.9:只接收GET一种请求方法,只支持纯文本 HTTP/1.0:支持PU ...
- 校友会小程序开发笔记二十九:小程序启动性能评测与优化(2)
校友会小程序定位是大量校友的社交类应用,因此对于性能,用户体验,交互体验要求很高,对于小程序的打开,流畅性, 数据的渲染都必须做尽可能的优化 运行时性能 setData setData 是校友会小程序 ...
- OpenCV学习(二十) :分水岭算法:watershed()
OpenCV学习(二十) :分水岭算法:watershed() 参考博客: OpenCV-分水岭算法 图像处理--分水岭算法 OpenCV学习(7) 分水岭算法(1) Opencv分水岭算法--wat ...
- 深度学习入门笔记(十九):卷积神经网络(二)
欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...
最新文章
- opencv可以在linux上运行,linux上 安装并 运行opencv
- 5G+云网融合,移动云带领开发者释放边缘计算的力量
- 麦肯锡全球调研160个案例,发布5个行业34个AI应用场景
- pugixml库的一个使用心得
- Nacos下载与安装-windows
- Android每周一个学习计划——RxJava2 0的学习使用
- 【Socket网络编程】7.以太网数据包、IP数据包、UDP数据包
- BUUCTF firmware
- java垃圾回收到老年代次数,Java垃圾回收之回收算法
- java 全局变量 跳出递归循环_Java技术知识点的一些总结
- 软件工程课, 编程课 助教的工作介绍
- boost operator 实例代码
- linux之dos2unix命令
- 普通话测试第四题评分标准_2017年普通话考试-评分细则
- OmniGraffle 7 Pro全新推出!V7.18.3(204.9.0)正式版 支持M1
- 华为交换机默认用户名密码bootrom密码
- ubuntu22.04编译opengl编程指南示例
- 网上商城的功能模块架构设计之(一)
- 利用Django创建简单app
- python软件如何下载-Python怎么下载安装