Skip to main content
 首页 » 编程设计

python之从二值化图像中删除特征

2025年05月04日8dudu

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

我拍了这样一张图:

自动裁剪并二值化。这是脚本的输出:

我想从图像中删除最大的连接黑色区域。有没有简单的方法可以做到这一点?

本来想通过腐 eclipse 图像去掉文字,然后把腐 eclipse 后的图像从原来的二值化图像中减去,没想到还有更合适的方法。

请您参考如下方法:

当然,您可以使用 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); 

将来,您可能会阅读有关自适应阈值以及如何在本地对颜色进行采样的内容。我个人发现对正交于图像梯度(即在其两侧)的二进制颜色进行采样很有用。这样,白色和黑色的样本大小相等,这是一个大问题,因为通常有更多的背景颜色会使估计产生偏差。使用 SWT和 MSER可能会给你更多关于文本分割的想法。