删去小于阈值的连通区域
2016-05-14 11:58
363 查看
程序:
//std::vector<std::vector<cv::Point>> contours;
//vector<Vec4i> hierarchy;
//cv::findContours(image_gray, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);// CV_RETR_EXTERNAL CV_RETR_CCOMP
//cv::Mat result(image_gray.size(), CV_8U, cv::Scalar(0));
//int index;
//double area, maxArea(0);
//for (int i = 0; i < contours.size(); i++)
//{
// area = contourArea(Mat(contours[i]));
// if (area > maxArea)
// {
// maxArea = area;
// index = i;
// }
//}
//drawContours(result, contours, index, Scalar(255), 2);
//std::cout << " Area " << area << std::endl;
//cv::namedWindow("Contours", 0);
//cv::imshow("Contours", result);
//std::cout << "result.cols " << result.cols << std::endl;
//std::cout << "result.rows " << result.rows << std::endl;
下面是bwareaopen(image_gray,10000); 源代码:
void bwareaopen(Mat& im, double size)
{
// Only accept CV_8UC1
if (im.channels() != 1 || im.type() != CV_8U)
return;
// Find all contours
vector<vector<Point> > contours;
findContours(im.clone(), contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
for (int i = 0; i < contours.size(); i++)
{
// Calculate contour area
double area = contourArea(contours[i]);
// Remove small objects by drawing the contour with black color
if (area > 0 && area <= size)
drawContours(im, contours, i, CV_RGB(0,0,0), -1);
}
}
//std::vector<std::vector<cv::Point>> contours;
//vector<Vec4i> hierarchy;
//cv::findContours(image_gray, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);// CV_RETR_EXTERNAL CV_RETR_CCOMP
//cv::Mat result(image_gray.size(), CV_8U, cv::Scalar(0));
//int index;
//double area, maxArea(0);
//for (int i = 0; i < contours.size(); i++)
//{
// area = contourArea(Mat(contours[i]));
// if (area > maxArea)
// {
// maxArea = area;
// index = i;
// }
//}
//drawContours(result, contours, index, Scalar(255), 2);
//std::cout << " Area " << area << std::endl;
//cv::namedWindow("Contours", 0);
//cv::imshow("Contours", result);
//std::cout << "result.cols " << result.cols << std::endl;
//std::cout << "result.rows " << result.rows << std::endl;
下面是bwareaopen(image_gray,10000); 源代码:
void bwareaopen(Mat& im, double size)
{
// Only accept CV_8UC1
if (im.channels() != 1 || im.type() != CV_8U)
return;
// Find all contours
vector<vector<Point> > contours;
findContours(im.clone(), contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
for (int i = 0; i < contours.size(); i++)
{
// Calculate contour area
double area = contourArea(contours[i]);
// Remove small objects by drawing the contour with black color
if (area > 0 && area <= size)
drawContours(im, contours, i, CV_RGB(0,0,0), -1);
}
}
相关文章推荐
- Spark入门实战系列--6.SparkSQL(下)--Spark实战应用
- ExpandListView--二级列表事例
- unity 计算两点的距离
- I/O复用select函数
- 在Linux下C/C++编程vim初步配置
- 51CTO大数据学习004-适配器模式
- Compose 命令说明
- 不要总是低头走路
- ping 192.168.1.1 icmp_seq=1 Destination Host Unreachable
- Spark入门实战系列--6.SparkSQL(中)--深入了解SparkSQL运行计划及调优
- 342. Power of Four
- RabbitMQ学习和使用
- 推荐——没有最水只有更水的OJ与史上最难OJ等世界OJ之最(IT)
- Debian下的搜狗拼音安装个人心得
- 关于android程序中使用bitmap放大功能时的OOM问题解决方法
- Spark入门实战系列--6.SparkSQL(上)--SparkSQL简介
- 多项式乘法 (快速傅里叶变换)
- cf#204-div1 -D - Jeff and Removing Periods-莫队算法-维护等差数列
- CollectionView如何按行排列
- Matlab Tricks(六)—— 矩阵乘法的实现