【发布时间】:2021-11-23 19:09:26
【问题描述】:
我有这张图片,我只想获得垂直线和对角线。我在 OpenCV 中使用morphologyEx。但是,我得到的结果不符合我的要求,因为我仍然有这些不需要的噪音。不幸的是,这些噪音与线条的强度相同,因此当我应用开孔来消除噪音时,线条也会消失。 谁能帮我解决这个问题?
int main() {
Mat dst, dst1, dst2, dst3;
Mat src = imread("cau3.png", IMREAD_GRAYSCALE);
imshow("source", src);
Mat kernel1 = getStructuringElement(MORPH_RECT, Size(45, 1), Point(-1, -1));
Mat kernel2 = getStructuringElement(MORPH_ELLIPSE, Size(11, 11), Point(-1, -1));
Mat kernel3 = getStructuringElement(MORPH_RECT, Size(21, 21), Point(-1, -1));
// Apply opening operation
morphologyEx(src, dst1, MORPH_OPEN, kernel1);
morphologyEx(src, dst2, MORPH_OPEN, kernel2);
morphologyEx(src, dst3, MORPH_OPEN, kernel3);
dst = src - (dst1 + dst2 + dst3);
imshow("Vertical and Diagonal lines with noise", dst);
waitKey(0);
return 0;
}
这是我的原图:
这是我的结果图片:
【问题讨论】:
-
stackoverflow.com/questions/45322630/… 我认为线路检测应该是适合您的方法。
-
你所说的“噪音”是什么?是较短的线条和点吗?如果是这样,例如,您可以查看区域开口。
-
@CrisLuengo 噪音是点,很抱歉造成这种误解。我会试试开区的,谢谢你的推荐
-
@satvikchoudhary 线路检测确实很强大,但是我的讲师没有提前教过,所以我必须想出别的办法。
-
findcontours 或 connectedcomponentswithstats,然后擦除那些小的特征(按宽度和高度)
标签: c++ opencv image-processing mathematical-morphology