En ajustant le seuil de Savant bord de l'algorithme

Je voulais m'essayer à la reconnaissance de texte, j'ai donc utilisé opencv à tracer les bords et c++ pour trouver les pentes, courbes, etc, le bord de l'algorithme fonctionne bien sur les gros et épuré des ensembles de caractères, mais quand il s'agit à l'encontre de petit imprimé du texte ou du texte avec beaucoup de bruit de fond comme incorporé dans captcha c'luttes et semble incomplète, je pense que je n'avais pas de définir les valeurs de seuil correctement et essayé différentes valeurs, sans succès.

En ajustant le seuil de Savant bord de l'algorithme

En ajustant le seuil de Savant bord de l'algorithme

Voici mon code :

#include "cv.h"
#include "highgui.h"
using namespace cv;
const int low_threshold  = 50;
const int high_threshold = 150;


int main()
{

    IplImage* newImg; 
    IplImage* grayImg; 
    IplImage* cannyImg; 

    newImg = cvLoadImage("ocv.bmp",1);

    grayImg = cvCreateImage( cvSize(newImg->width, newImg->height), IPL_DEPTH_8U, 1 );

    cvCvtColor( newImg, grayImg, CV_BGR2GRAY );
    cannyImg = cvCreateImage(cvGetSize(newImg), IPL_DEPTH_8U, 1);

    cvCanny(grayImg, cannyImg, low_threshold, high_threshold, 3);
    cvNamedWindow   ("Source", 1);
    cvNamedWindow   ("Destination",1);
    cvShowImage     ("Source", newImg );
    cvShowImage     ("Destination", cannyImg );
    cvWaitKey(0);
    cvDestroyWindow ("Source" );
    cvDestroyWindow ("Destination" );
    cvReleaseImage  (&newImg );
    cvReleaseImage  (&grayImg );
    cvReleaseImage  (&cannyImg );

return 0;

}

J'ai regardé sur le net et avons vu un peu compliqué seuillage conditions de travail dans ce code à partir de ce site :

% Set direction to either 0, 45, -45 or 90 depending on angle.
[x,y]=size(f1);
for i=1:x-1,
    for j=1:y-1,
        if ((gradAngle(i,j)>67.5 && gradAngle(i,j)<=90) || (gradAngle(i,j)>=-90 && gradAngle(i,j)<=-67.5)) 
            gradDirection(i,j)=0;
        elseif ((gradAngle(i,j)>22.5 && gradAngle(i,j)<=67.5))
            gradDirection(i,j)=45;
        elseif ((gradAngle(i,j)>-22.5 && gradAngle(i,j)<=22.5))
            gradDirection(i,j)=90;
        elseif ((gradAngle(i,j)>-67.5 && gradAngle(i,j)<=-22.5))
            gradDirection(i,j)=-45;
        end
    end
end

Si c'est la solution quelqu'un peut-il me fournir le c++ équivalent de cet algorithme, si ce n'est pas ce que je peux faire ?

OriginalL'auteur Gambit King | 2012-07-07