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
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
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:
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?
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: