c++opencv去除伪轮廓
时间: 2023-06-29 09:20:24 浏览: 273
要去除伪轮廓,可以使用OpenCV中的形态学操作。具体步骤如下:
1.将图像二值化。
2.使用形态学开运算去除图像中的小白点和小黑洞。
3.使用形态学闭运算填补图像中的小黑洞。
4.使用轮廓检测函数找到图像中的所有轮廓。
5.使用面积阈值过滤掉面积小于一定值的轮廓。
6.使用绘制轮廓函数将筛选后的轮廓绘制到图像上。
以下是代码示例:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat src = imread("input.jpg", IMREAD_GRAYSCALE);
Mat dst = Mat::zeros(src.size(), CV_8UC1);
// 二值化
threshold(src, dst, 128, 255, THRESH_BINARY);
// 形态学开运算去除小白点和小黑洞
Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
morphologyEx(dst, dst, MORPH_OPEN, kernel);
// 形态学闭运算填补小黑洞
morphologyEx(dst, dst, MORPH_CLOSE, kernel);
// 轮廓检测
std::vector<std::vector<Point>> contours;
findContours(dst, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 面积过滤
for (int i = 0; i < contours.size(); i++)
{
double area = contourArea(contours[i]);
if (area > 100) // 面积阈值
drawContours(src, contours, i, Scalar(255), 2);
}
imshow("src", src);
waitKey(0);
return 0;
}
```
需要注意的是,这只是一种简单的去除伪轮廓的方法,具体效果还需要根据实际情况进行调整。
阅读全文