用于文本识别的图像预处理
image-processing
opencv
6
0

适用于EmguCV中用于文本识别的图像的最佳图像预处理操作是什么?

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

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

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

谢谢

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

尝试形态图像处理。看看这个 。但是,它仅适用于二进制图像-因此您必须将图像二值化(阈值?)。尽管很简单,但它取决于字体大小,因此一个结构元素将不适用于所有字体大小。如果您想要一个通用的解决方案,那么有很多论文可以用于图像中的文本检测-在Google Scholar中搜索该术语应该为您提供一些有用的出版物。

收藏
评论

没有什么比最佳组合更好的了 。请记住,数字图像可以通过不同的捕获设备获取,并且每个设备都可以嵌入其自己的预处理系统(滤波器)和其他特征,这些特征可以极大地改变图像,甚至给它们添加噪音。因此,必须对每个案件进行不同的处理(预处理)。

但是, 存在一些可用于改善检测的通用操作 ,例如,非常基本的操作是将图像转换为灰度并应用阈值对图像进行二化。我之前使用的另一种技术是bounding box ,它使您可以检测文本区域。要消除图像中的噪点,您可能会对侵蚀/膨胀操作感兴趣。我在这篇文章中演示了其中一些操作。

此外,还有一些有关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);
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号