使用C++ connectedComponentsWithStats查找连通域并过滤面积小的噪点
时间: 2024-05-08 07:15:31 浏览: 104
以下是使用C++的示例代码:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
// 读取图像
Mat src = imread("input.png", IMREAD_GRAYSCALE);
// 二值化图像
Mat bw;
threshold(src, bw, 0, 255, THRESH_BINARY | THRESH_OTSU);
// 查找连通域
Mat labels, stats, centroids;
int num_objects = connectedComponentsWithStats(bw, labels, stats, centroids);
// 过滤面积小的噪点
int min_area = 100; // 设定最小面积
for (int i = 1; i < num_objects; i++)
{
int area = stats.at<int>(i, CC_STAT_AREA);
if (area < min_area)
{
// 将该连通域对应的像素置为黑色
for (int j = 0; j < labels.rows; j++)
{
for (int k = 0; k < labels.cols; k++)
{
if (labels.at<int>(j, k) == i)
{
bw.at<uchar>(j, k) = 0;
}
}
}
}
}
// 显示结果
imshow("input", src);
imshow("output", bw);
waitKey();
return 0;
}
```
在上述代码中,我们首先读取输入图像,并使用Otsu阈值法将其二值化。接着使用`connectedComponentsWithStats`函数查找连通域,并得到每个连通域的面积。最后,我们遍历每个连通域,如果其面积小于设定的最小面积,则将该连通域对应的像素置为黑色(即过滤掉该连通域)。最后,我们显示输出图像。
阅读全文