Köşelerin tespiti Opencv Delphi


Opencv kütüphanesi bir görüntüdeki belirgin köşeleri bulmak için hazır bir fonksiyona sahiptir. cvGoodFeaturesToTrack. Bu fonksiyondan çıkan köşeleri tekrar düzenlemek için cvFindCornerSubPix prosedürü kullanılır.

Köşe bulma kodu:

 

procedure TForm2.btnkosebulClick(Sender: TObject);
type
    TPointsArr = array[0..250] of CvPoint2D32f;
    PPointsArr = ^TPointsArr;
var
    img2,eig,temp:PIplImage;

    points: array[0..1] of PPointsArr;
    pointsRow1, pointsRow2: TPointsArr;
    ipar1,count,j:integer;
begin
    ipar1:=4; // kaç tane köşe bulmak istiyorsun. 4 tane
    img2 := cvLoadImage('mot1.png',CV_LOAD_IMAGE_GRAYSCALE);
    eig := cvCreateImage( cvGetSize(img2), 32, 1 );
    temp := cvCreateImage( cvGetSize(img2), 32, 1 );

    points[0] := @pointsRow1[0];
    //points[1] := @pointsRow2[0];
    cvGoodFeaturesToTrack( img2, eig, temp, @points[0][0], @ipar1,
    0.05, 10, 0, 5, 0, 0.09 );
    cvFindCornerSubPix( img2, @points[0][0], count,
    cvsize_(5, 5), cvSize_(-1, -1),
    cvTermCriteria_(CV_TERMCRIT_ITER or CV_TERMCRIT_EPS, 20, 0.03));
     for j:=0 to ipar1 -1 do
     begin
        cvCircle( img2, cvPointFrom32f_(points[0][j]), 3, CV_RGB(0,255,255), -1, 8,0);
        cvCircle( img2, cvPointFrom32f_(points[0][j]), 8, CV_RGB(255,0,0), -1, 8,0);
     end;

     cvNamedWindow('bb',1);
     cvShowImage('bb',img2);
end;