我的图像中有几乎恒定的线条,我使用algorythm进行形态学操作以清除它们的图像。问题是,形态开启或关闭将线条与图像的边缘合并,而不仅仅是融化邻居轮廓。我只需要通过形态学操作融化邻居轮廓并避免该线条与边缘合并,因为后来我无法清除图像中线条的合并平衡。即使我反转图像并变形,问题仍然存在。操作(图像像素从黑到白,从白到黑,而不是打开我使用关闭)。
如何阻止这种情况?
我使用此操作合并邻居轮廓:
Mat morphKernelClose = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new org.opencv.core.Size(25, 25));
Imgproc.morphologyEx(src, src, Imgproc.MORPH_CLOSE, morphKernelClose);
简单的Canny图片:
使用MORPH_CLOSE后的图像:
这个错误不允许我通过使用第二个形态学操作完全清除线条(剩下那些合并的部分),与第一次使用相反。
答案 0 :(得分:2)
最简单的解决方案是增加图像大小,用黑色填充添加的轮廓,然后执行操作:
答案 1 :(得分:1)
感谢 FiReTiTi 和 Micka 帮助我解决此问题。我使用了Micka的建议。
我使用了physicsEx的第三个功能,它允许操纵边框。问题中给出的代码将替换为此代码:
Mat morphKernelClose = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new org.opencv.core.Size(25, 25));
Point anchor = new Point(morphKernelClose.size().width/2, morphKernelClose.size().height/2);
Imgproc.morphologyEx(src, src, Imgproc.MORPH_CLOSE, morphKernelClose, anchor, 1, Core.BORDER_CONSTANT, new Scalar(0,0,0));
这种方法既快速又简单,但并不完美,因为它只会切断边界附近的像素。
如果您有任何建议如何改进,请在评论中发布!