我有一些手绘图形(电路)的阈值图像,但是有些地方我需要在两点之间缩小缝隙,如下图所示:
Binary image
我尝试关闭(先扩张再侵 eclipse ),但无法正常工作。它无法填补空白,并使电阻器和其他组件无法识别。我找不到合适的顶点变形大小和迭代次数来获得良好的效果,而又不影响其余图片。重要的是不要影响太多组件。
我不能使用高音线条,因为间隙并不总是成直线。
关闭后的结果:
Result after closing
int morph_size1 = 2;
Mat element1 = getStructuringElement(MORPH_RECT, Size(2 * morph_size1 + 1, 2 * morph_size1 + 1), Point(morph_size1, morph_size1));
Mat dst1; // result matrix
for (int i = 1; i<3; i++)
{
morphologyEx(binary, dst1, CV_MOP_CLOSE, element1, Point(-1, -1), i);
}
imshow("closing ", dst1);
任何的想法?
提前致谢。
最佳答案
我的建议:
*在此步骤中,在不同的连接组件中寻找邻居非常重要,以避免将零件链接到自身;因此您也需要blob标签。
在这种细化过程中,由于我清除了这些框,因此比您原始图片中的中断更多。
当然,您可以在原始图像中绘制填充线段。
此过程可能并不完美,因为有时会缺少端点,有时会考虑使用不需要的端点。
作为改进,您可以尝试估算端点处的方向,并且仅搜索是一个 Angular 扇区。