【发布时间】:2019-01-14 17:37:27
【问题描述】:
我正在尝试使用带有 opencv 和 c++ 的 Tesseract 库对包含数字和字符的图像进行 OCR。在调用 tesseract 库之前,我习惯用 opencv 对图像进行灰度化
cvtColor(roiImg,roiImg,CV_BGR2GRAY);
这是
此图像的 OCR 结果并非 100% 准确。
然后用 python 的枕头库测试了相同的图像。使用以下方法对原始图像进行灰度处理。
gray = image.convert('L')
这是
后者提到的灰度图像给出了 100% 准确的结果。
一旦我通过互联网搜索,有人提到 opencv BGR2Gray 和枕头 img.convert 方法都使用相同的亮度变换算法。
两个不同的 OCR 结果的原因是什么?
提前致谢
【问题讨论】:
-
OpenCV 默认使用 BGR,但您正在从 RGB 转换为灰色 (
CV_RGB2GRAY)。不应该是CV_BGR2GRAY吗? -
@嗨,我是 Frogatto,你说得对。我编辑了代码。知道为什么会这样吗?
-
在@Hi I'm Frogatto 建议后仍然遇到同样的问题?
-
看起来这两个库使用相同的公式将颜色转换为 RGB:docs.opencv.org/3.2.0/de/d25/…; pillow.readthedocs.io/en/4.0.x/reference/… 差异可能是由于舍入误差。您可以通过使用值从 0 到 255 的
16x16图像来检查并比较结果。 -
@NAmorim 是的。还是和上面提到的一样。
标签: c++ opencv image-processing pillow