私のプロジェクトではOpencvを使用しています。下の画像をしきい値画像に変換する必要があります
私はこの機能を試しました:
Imgproc.threshold(imgGray, imgThreshold, 0, 255, Imgproc.THRESH_BINARY + Imgproc.THRESH_OTSU);
しかし、以下に示すように、結果はそれほど良くありませんでした
だから私はadaptiveThreshold function
を試しました:
Imgproc.adaptiveThreshold(imgGray, imgThreshold, 255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C, Imgproc.THRESH_BINARY, 11, 2);
その結果:
背景が白でテキストが黒のバイナリ画像で、黒い領域やノイズがないことを期待しています(時間がかかるため、Photo.fastNlMeansDenoising
の使用は好みません)。この解決策を教えてください。
また、日本語認識にはTesseract
を使用していますが、正解率が良くありません。日本語のOCRの改善や、テッセラクトの品質を向上させる方法について何か提案はありますか?
ここでは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);
結果の画像は次のとおりです。