2017-10-02 5 views
0

Je l'échantillon de l'écriture manuscrite suivante prise avec trois instruments d'écriture différents:Trouver la largeur d'une course d'encre dans une image en utilisant OpenCV & C++

enter image description here

En regardant l'écriture, je peux dire qu'il y est une différence nette entre les deux premiers et le dernier. Mon but est de déterminer une approximation de l'épaisseur de trait pour chaque lettre, ce qui me permet de les regrouper en fonction de leur épaisseur ou de leur épaisseur.

Jusqu'à présent, j'ai essayé de regarder dans stroke width transform, mais j'ai eu du mal à le traduire à mon exemple.

Je suis capable de prétraiter l'image telle que je viens de quitter avec seulement les contours du test en question. Par exemple, voici épais de la dernière ligne:

enter image description here

+0

Ce * est * le cas d'utilisation parfaite pour la largeur de course de transformation. Peut-être que si vous avez posté votre tentative comme une autre question, vous pourriez obtenir de l'aide pour la mettre en œuvre? Il existe d'autres façons d'essayer ce problème bien sûr, je pense que la réponse de Kamil est quelque chose que vous pouvez facilement essayer de voir comment il fonctionne ... mais transformer la largeur de course serait en fait travailler vraiment bien ici, si vous l'avez travail. –

+0

@AlexanderReynolds Merci pour l'offre. J'ai passé pas mal de temps à regarder SWT, principalement en localisant différents exemples que les gens avaient mis en ligne et en essayant d'extraire uniquement le calcul de largeur dans mon projet. Cependant, je n'ai pas besoin d'une valeur précise, donc je voulais aller avec une approche plus légère. Cela dit, je voudrais explorer SWT à l'avenir car il semble très prometteur pour d'autres applications. – CodeBender

Répondre

1

Je suggère la détection de contours avec cv::findContours que vous faites et puis comparez bondissant zone rectangulaire et contour. L'écriture plus épaisse le plus grand coefficient (contourArea/boundingRectArea) sera.

+0

Je aime vraiment cette approche, d'autant plus que l'OP est tout simplement intéressé par groupe, les valeurs ne compte pas tant qu'ils sont suffisamment différentes pour les lettres épaisses et minces. Pensez-vous qu'il serait encore mieux d'utiliser le périmètre du contour? Bien sûr, vous voudriez faire une approximation du contour pour lisser le contour. Je pense juste aux cas où la zone peut être petite mais avec une grande zone de délimitation, comparée à quand la zone peut être grande mais avec une zone de délimitation plus forte. Par exemple. L et M peuvent produire une boîte englobante de taille similaire mais avec des zones largement différentes. Peut-être –

+0

éclaircie et périmètre serait un peu mieux –

+0

@KamilSzelag Merci, j'ai pu obtenir ce que je voulais utiliser cette approche. D'abord, j'ai dû convertir l'image en niveaux de gris, puis trouver Contours, puis filtrer les extrêmes et ensuite calculer le coefficient. En ce qui concerne l'amincissement ou l'érosion, il serait problématique pour les lignes fines comme le crayon. – CodeBender