从二值化图像中删除要素

cas*_*avo 1 python numpy image-processing computer-vision scikit-image

我写了一个小脚本来将黑板图片转换成我可以打印并标记的形式.

我拍这样的照片:

在此输入图像描述

自动裁剪,并将其二值化.这是脚本的输出:

在此输入图像描述

我想从图像中删除最大的连接黑色区域.有一个简单的方法吗?

我正在考虑侵蚀图像以消除文本,然后从原始二值化图像中减去侵蚀图像,但我不禁想到有更合适的方法.

Vla*_*lad 7

当然,您可以使用findContours或floodFill获取连接的组件(特定大小),并擦除它们留下一些污迹.但是,如果你想做得对,你会想到为什么你首先要有黑色区域.

您没有使用自适应阈值处理(局部自适应),这使您的输出对着色敏感.尝试不要通过运行这样的东西来获得黑色区域:

Mat img = imread("desk.jpg", 0);
Mat img2, dst;
pyrDown(img, img2);
adaptiveThreshold(255-img2, dst, 255,  ADAPTIVE_THRESH_MEAN_C,
        THRESH_BINARY, 9, 10); imwrite("adaptiveT.png", dst);
imshow("dst", dst);
waitKey(-1);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

将来,您可能会阅读有关自适应阈值以及如何在本地对颜色进行采样的内容.我个人发现,对图像渐变(在其两侧)正交地采样二进制颜色很有用.这样,白色和黑色的样本具有相同的尺寸,这是一个很大的问题,因为通常有更多的背景颜色偏向估计.使用SWTMSER可以为您提供有关文本分段的更多想法.