13

在 EmguCV 中应用于图像以进行文本识别的最佳图像预处理操作是什么?

我在这里包含了两个示例图像。

应用低通或高通滤波器不合适,因为文本可能是任何大小。我尝试过中值和双边滤波器,但它们似乎对图像影响不大。

理想的结果是所有文本为白色,其余大部分为黑色的二进制图像。然后将该图像发送到 OCR 引擎。

谢谢

4

2 回答 2

18

没有什么比得上最好的了。请记住,数字图像可以由不同的捕获设备获取,每个设备都可以嵌入自己的预处理系统(过滤器)和其他可以彻底改变图像甚至添加噪声的特性。因此,必须对每个案例进行不同的处理(预处理)。

但是,有一些常见的操作可以用来改进检测,例如,一个非常基本的操作是将图像转换为灰度并应用阈值来对图像进行二值化。我之前使用的另一种技术是边界框,它允许您检测文本区域。要从图像中去除噪声,您可能对腐蚀/扩张操作感兴趣。我在这篇文章中演示了其中一些操作。

此外,还有其他关于 OCR 和 OpenCV 的有趣帖子,您应该看看:

现在,只是为了向您展示一种可用于示例图像的简单方法,这是反转颜色并应用阈值的结果:

cv::Mat new_img = cv::imread(argv[1]);
cv::bitwise_not(new_img, new_img);

double thres = 100;
double color = 255;
cv::threshold(new_img, new_img, thres, color, CV_THRESH_BINARY);

cv::imwrite("inv_thres.png", new_img);
于 2012-07-13T13:19:13.833 回答
2

尝试形态学图像处理。看看这个。但是,它仅适用于二值图像 - 因此您必须对图像进行二值化(阈值?)。虽然它很简单,但它取决于字体大小,因此一个结构元素不适用于所有字体大小。如果你想要一个通用的解决方案,有很多关于图像文本检测的论文——在谷歌学者中搜索这个词应该会为你提供一些有用的出版物。

于 2012-07-13T09:20:59.437 回答