opencv中使用c++筛选去掉小面积的轮廓
时间: 2024-05-10 21:20:26 浏览: 86
opencv c++轮廓筛选
可以使用cv::findContours函数找到所有轮廓,然后遍历每个轮廓,计算其面积,如果面积小于某个阈值,就可以将其排除掉。
以下是示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
Mat image = imread("test.jpg", 0); // 读取灰度图像
if (image.empty())
{
cout << "Failed to read image" << endl;
return -1;
}
Mat binary_image;
threshold(image, binary_image, 128, 255, THRESH_BINARY); // 二值化
vector<vector<Point>> contours;
findContours(binary_image, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE); // 查找轮廓
Mat result = Mat::zeros(image.size(), CV_8UC3); // 创建结果图像
for (size_t i = 0; i < contours.size(); i++)
{
double area = contourArea(contours[i]); // 计算轮廓面积
if (area > 100) // 如果面积大于阈值,则绘制轮廓
{
drawContours(result, contours, static_cast<int>(i), Scalar(0, 255, 0), 2);
}
}
imshow("Result", result);
waitKey(0);
return 0;
}
```
以上代码会将面积大于100的轮廓绘制在结果图像上。可以根据实际需求修改阈值。
阅读全文