Image de seuil utilisant opencv (Java)


Je travaille avec Opencv pour mon projet. J'ai besoin de convertir l'image ci-dessous en image de seuil

Image D'Origine

J'ai essayé cette fonction:

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

, Mais le résultat n'était pas bon, comme vous le voyez ci-dessous

seuil

J'ai donc essayé le adaptiveThreshold function:

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

Et il en résulta:

adaptiveThreshold

Je m'attends juste à une image binaire avec fond blanc et texte noir uniquement, pas de zone noire ou de bruit ( je ne préfère pas utiliser Photo.fastNlMeansDenoising car cela prend beaucoup de temps). Aidez-moi avec une solution pour cela.

De plus, j'utilise Tesseract pour la reconnaissance japonaise mais le taux de précision n'est pas bon. Avez - vous des suggestions sur une meilleure OCR pour le japonais, ou une méthode pour améliorer la qualité du Tesseract?

Author: Kalyan Chavali, 2015-07-08

1 answers

adaptiveThreshold est le bon choix ici. Juste besoin d'un petit réglage. Avec ces paramètres (c'est C++, mais vous pouvez facilement traduire en Java)

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

, L'image résultante est:

entrez la description de l'image ici

 17
Author: Miki, 2015-07-08 11:01:22