我想通过对其进行阈值处理来预处理给定的图片,然后将其交给Tesseract。我首先使用Gimp(2.8.16)和130 - 255的固定范围。当我然后使用Java在OpenCV(3.1)中实现它时,我首先忘记调用cvtColor导致图片中仍然有一些颜色(这些地区在Gimp是白色的)。除此之外,情况如预期。但是,当我实现相应的调用时,我得到的图片与我预期的图片不同。看来之前着色的区域现在是黑色的,而剩下的图像与我用Gimp创建的区域相似。
是否有任何我缺少的东西来创建更相似的输出?
我问这个问题的原因是,不幸的是,Tesseract(使用psm 6)为这两个图像创建了截然不同的结果:
以下是我使用的代码:
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);
以下是图片:
鉴于图片:
使用Gimp创建的图片:
使用OpenCV的第一个结果:
使用OpenCV的第二个结果:
答案 0 :(得分:0)
在第一种情况下,您正在对彩色图像进行阈值处理(tmp = src.clone()创建另一个src副本,这是一个彩色图像)。所以你得到的结果是这样的,在第二种情况下,你首先转换为灰度,然后是阈值处理,这样可以得到更好的结果。阈值在灰度图像上很好。