在EmguCV中应用于图像进行文本识别的最佳图像预处理操作是什么?
我收录了两张示例图片here。
应用低通或高通滤波器将不合适,因为文本可以是任何大小。我尝试过中位数和双边滤波器,但它们似乎对图像影响不大。
理想的结果是二进制图像,所有文本都是白色的,其余大部分是黑色的。然后将该图像发送到OCR引擎。
由于
答案 0 :(得分:17)
没有最好的设置。请记住,数字图像可以通过不同的捕获设备获取,每个设备都可以嵌入自己的预处理系统(过滤器)和其他可以彻底改变图像甚至为它们添加噪声的特性。所以每个案例都必须以不同方式处理(预处理)。
然而,可以用来改善检测的常用操作,例如,一个非常基本的操作是将图像转换为灰度并应用threshold进行二值化图片。我之前使用的另一种技术是the bounding box,它允许您检测文本区域。要从图像中去除噪声,您可能会对侵蚀/扩张操作感兴趣。我在this post上演示了其中的一些操作。
此外,还有其他有关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);
答案 1 :(得分:2)
尝试形态图像处理。看看this。但是,它仅适用于二进制图像 - 因此您必须对图像进行二值化(阈值?)。虽然很简单,但它依赖于字体大小,因此一个结构元素不适用于所有字体大小。如果你想要一个通用的解决方案,有很多论文用于图像中的文本检测 - 在谷歌学者中搜索这个术语应该会为你提供一些有用的出版物。