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;