与预期

时间:2016-08-03 04:12:18

标签: java opencv

我想通过对其进行阈值处理来预处理给定的图片,然后将其交给Tesseract。我首先使用Gimp(2.8.16)和130 - 255的固定范围。当我然后使用Java在OpenCV(3.1)中实现它时,我首先忘记调用cvtColor导致图片中仍然有一些颜色(这些地区在Gimp是白色的)。除此之外,情况如预期。但是,当我实现相应的调用时,我得到的图片与我预期的图片不同。看来之前着色的区域现在是黑色的,而剩下的图像与我用Gimp创建的区域相似。

是否有任何我缺少的东西来创建更相似的输出?

我问这个问题的原因是,不幸的是,Tesseract(使用psm 6)为这两个图像创建了截然不同的结果:

  • 为在Gimp创建的那个:“2011 1 L 0006”
  • 用于使用OpenCV创建的第二个:“2011ÔÇö] L 0 0006 1”

以下是我使用的代码:

Mat thres = new Mat();
Mat tmp = new Mat();
Imgproc.cvtColor(src, tmp, Imgproc.COLOR_BGR2GRAY); // tmp = src.clone(); in my first attempt
Imgproc.threshold(tmp, thres, 130, 255, Imgproc.THRESH_BINARY);
Imgcodecs.imwrite("output.jpg", thres);

以下是图片:

鉴于图片:

http://i.stack.imgur.com/XOeMw.jpg

使用Gimp创建的图片:

http://i.stack.imgur.com/ox8g9.jpg

使用OpenCV的第一个结果:

http://i.stack.imgur.com/ZHLZN.jpg

使用OpenCV的第二个结果:

http://i.stack.imgur.com/FTlw3.jpg

1 个答案:

答案 0 :(得分:0)

在第一种情况下,您正在对彩色图像进行阈值处理(tmp = src.clone()创建另一个src副本,这是一个彩色图像)。所以你得到的结果是这样的,在第二种情况下,你首先转换为灰度,然后是阈值处理,这样可以得到更好的结果。阈值在灰度图像上很好。