web-dev-qa-db-ja.com

opencvを使用したしきい値イメージ(Java)

私のプロジェクトでは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の改善や、テッセラクトの品質を向上させる方法について何か提案はありますか?

10
Bee Bee

ここでは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

20
Miki