使用OpenCV查找二值图中最大连通区域
2016-03-01 10:23
363 查看
/article/1896263.html
2014-10-19 22:31 2802人阅读 评论(0) 收藏 举报
分类:
图像与OpenCV(15)
版权声明:本文为shaoxiaohu原创文章,欢迎转载,请注明出处,谢谢。
上一篇博文中介绍了matlab查找最大连通区域的方法,OpenCV函数中也有类似的函数与之对应,findCoutours。下面代码为使用示例:
[cpp] view plain copy
cv::Mat bwImg;
vector<vector<cv::Point>> contours ;
// 二值化图像
cv::threshold(srcImg, bwImg, 0.0, 255.0, CV_THRESH_BINARY | CV_THRESH_OTSU);
cv::imshow("binary image", bwImg);
cv::waitKey();
// 查找轮廓,对应连通域
cv::findContours(bwImg,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);
// 寻找最大连通域
double maxArea = 0;
vector<cv::Point> maxContour;
for(size_t i = 0; i < contours.size(); i++)
{
double area = cv::contourArea(contours[i]);
if (area > maxArea)
{
maxArea = area;
maxContour = contours[i];
}
}
// 将轮廓转为矩形框
cv::Rect maxRect = cv::boundingRect(maxContour);
// 显示连通域
cv::Mat result1, result2;
bwImg.copyTo(result1);
bwImg.copyTo(result2);
for (size_t i = 0; i < contours.size(); i++)
{
cv::Rect r = cv::boundingRect(contours[i]);
cv::rectangle(result1, r, cv::Scalar(255));
}
cv::imshow("all regions", result1) ;
cv::waitKey();
cv::rectangle(result2, maxRect, cv::Scalar(255));
cv::imshow("largest region", result2) ;
cv::waitKey();
[cpp] view plain copy
使用OpenCV查找二值图中最大连通区域
标签: OpenCVfindCoutours2014-10-19 22:31 2802人阅读 评论(0) 收藏 举报
分类:
图像与OpenCV(15)
版权声明:本文为shaoxiaohu原创文章,欢迎转载,请注明出处,谢谢。
上一篇博文中介绍了matlab查找最大连通区域的方法,OpenCV函数中也有类似的函数与之对应,findCoutours。下面代码为使用示例:
[cpp] view plain copy
cv::Mat bwImg;
vector<vector<cv::Point>> contours ;
// 二值化图像
cv::threshold(srcImg, bwImg, 0.0, 255.0, CV_THRESH_BINARY | CV_THRESH_OTSU);
cv::imshow("binary image", bwImg);
cv::waitKey();
// 查找轮廓,对应连通域
cv::findContours(bwImg,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);
// 寻找最大连通域
double maxArea = 0;
vector<cv::Point> maxContour;
for(size_t i = 0; i < contours.size(); i++)
{
double area = cv::contourArea(contours[i]);
if (area > maxArea)
{
maxArea = area;
maxContour = contours[i];
}
}
// 将轮廓转为矩形框
cv::Rect maxRect = cv::boundingRect(maxContour);
// 显示连通域
cv::Mat result1, result2;
bwImg.copyTo(result1);
bwImg.copyTo(result2);
for (size_t i = 0; i < contours.size(); i++)
{
cv::Rect r = cv::boundingRect(contours[i]);
cv::rectangle(result1, r, cv::Scalar(255));
}
cv::imshow("all regions", result1) ;
cv::waitKey();
cv::rectangle(result2, maxRect, cv::Scalar(255));
cv::imshow("largest region", result2) ;
cv::waitKey();
[cpp] view plain copy
相关文章推荐
- Linux之使用内核模块增加一个系统调用
- Overlay之VXLAN架构
- CentOS中用户不在 sudoers 文件中。此事将被报告。
- Linux常用命令大全
- 灵活运用OPC驱动增强通讯效率和可靠性
- 2月全球域名商(国际域名)注册保有量及份额TOP18
- linux core dump
- Linux/Unix下tar命令详解
- OpenCV:二值图像连通区域分析与标记算法实现
- Linux awk小记
- openPOWERLINK开源POWERLINK协议栈说明文档中文非官方翻译
- Linux下SVN项目自动下载更新提交
- tomcat架构分析 (connector NIO 实现)
- 作为OPC服务器的紫金桥软件与PHD的通讯
- Docker 使用总结
- linux的帮助命令
- Nginx配置文件nginx.conf中文详解
- nginx实现代理和负载均衡
- 架构漫谈专栏系列文章
- opencv 连通域需要的函数解析