网站首页 > 文章精选 正文
一、概述
使用发现并绘制轮廓比较简单,只需要调用findContours和drawContours两个方法就行了,但前提是要对图像做一下预处理。
实现步骤如下:
1.将原图转换为灰度图像
2.执行二值分割
3.去除无用的噪声
4.发现轮廓
5.绘制轮廓
6.展示轮廓图
二、示例代码
Mat src = imread(inputImagePath);
imshow("原始图", src);
cvtColor(src, src, COLOR_BGR2GRAY);
//取阈值后的图
Mat dstImage = Mat::zeros(Size(src.cols, src.rows), CV_8UC3);
// src = src > 119;//src取阈值大于119的那部分
threshold(src, src, 165, 255, THRESH_BINARY);
imshow("取阈值后的图", src);
waitKey(0);
//定义轮廓和层次结构
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
//此处输入的图像必须是一个二值的单通道图像(src),否则findContours不执行
findContours(src, contours, hierarchy, RETR_CCOMP, CHAIN_APPROX_SIMPLE);
int index = 0;
for (; index >= 0; index = hierarchy[index][0]) {
//随机生成不同的颜色值
Scalar color(rand() & 255, rand() & 255, rand() & 255);
//将轮廓绘制在预先建立好的mat中
drawContours(dstImage, contours, index, color, FILLED, 8, hierarchy);
}
imshow("轮廓图", dstImage);
waitKey(0);
三、展示效果
由于这里填充轮廓的颜色是随机颜色,所以每次运行,轮廓图都会有所不同。
猜你喜欢
- 2025-01-01 前端智能化实践:从图片识别UI样式
- 2025-01-01 OpenCV 和 Python 识别数字的结果是怎样的呢
- 2025-01-01 HALCON_极坐标变换
- 2025-01-01 python使用fitz和opencv库提取pdf中的表格
- 2025-01-01 Fluent 多孔介质仿真(Porous Media)
- 2025-01-01 基于密度(Density-based)的聚类——核密度估计(KDE)
- 2025-01-01 机器视觉halcon学习系列---XLD的介绍和使用
- 2025-01-01 平学(26):Matlab学习之三维曲面图与常见函数(2)
- 2025-01-01 [OpenCV实战]13 OpenCV中使用Mask R-CNN进行对象检测和实例分割
- 2025-01-01 OpenCV使用分水岭算法实现图像分割
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)