使用opencv(Java)的阈值图像

时间:2015-07-08 10:24:35

标签: java android opencv image-processing tesseract

我正在为我的项目使用Opencv。我需要将下面的图像转换为阈值图像

Original Image

我试过这个功能:

Imgproc.threshold(imgGray, imgThreshold, 0, 255, Imgproc.THRESH_BINARY + Imgproc.THRESH_OTSU); 

但结果不太好,如下所示

threshold

所以我尝试了adaptiveThreshold function

Imgproc.adaptiveThreshold(imgGray, imgThreshold, 255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY, 11, 2); 

结果:

adaptiveThreshold

我只希望二进制图像只有白色背景和黑色文本,没有黑色区域或噪音(我不喜欢使用Photo.fastNlMeansDenoising,因为它需要很多时间)。请帮我解决这个问题。

另外,我使用Tesseract进行日语识别,但准确率不高。您对日本的更好的OCR或任何提高Tesseract质量的方法有什么建议吗?

1 个答案:

答案 0 :(得分:18)

adaptiveThreshold是正确的选择。 只需要一个小小的调整。 使用这些参数(它是C ++,但您可以轻松转换为Java)

Mat1b gray= imread("path_to_image", IMREAD_GRAYSCALE);
Mat1b result;
adaptiveThreshold(gray, result, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 15, 40);

生成的图像是:

enter image description here