-Program Açıklaması:--
Arkadaşlar yukarıdaki görseli dikkat çekmek için kullandık.-
Aşağıdaki kod bu konuya giriş mahiyetinde bir kod.-
Daha sonra bu konuda gelişmiş bir örnek paylaşacağız.-
Bu kodda koordinatı verilen herhangi bir nokta (piksel) calcOpticalFlowPyrLK foksiyonuyla takip ediliyor ve yeni nokta işaretleniyor.-
Tabiki örneğimiz resim ile değil
(çünkü resim hareketsiz
Yani webcam’de işaretlenen bir noktayı takip ediyor.-
Bu sayede koordinatları bilinen (yeri bulunan) bir cisim yer değiştirsede program onu takip etmeye devam ediyor.-
PROGRAM KODLARI
Kod:
#include <opencv2\opencv.hpp>
#include "iostream"
using namespace std;
using namespace cv;
//takip edilecek pikselin koordinatları
int x = 320;
int y = 240;
int main()
{
//0. kamera yani dahili kamera seçildi
VideoCapture kamera(0);
//eğer kamera açılmazsa
if (!kamera.isOpened())
{
cout << "webcam bulunamadi" << endl;
system("Pause");
return -1;
}
Mat yeni, eski;
Mat goruntu; //kameranın anlık görüntüsü bu değişkene atanacak
vector<Point2f> oncekiNokta, sonrakiNokta; //önceki ve sonraki noktalar
vector<uchar> durum; //nokta var mı yok mu
vector<float> hata; //hesaplama hatası
oncekiNokta.push_back(Point(x, y)); //önceki noktanın yeri
kamera >> goruntu; //görüntü kameradan frame frame alınıyor
cvtColor(goruntu, yeni, CV_BGR2GRAY); //kameradan alınan görüntü gri formata dönüştürüldü
while (true)
{
eski = yeni.clone(); //aynı özelliklere sahip resim kopyalandı
kamera >> goruntu; //görüntü kameradan frame frame alınıyor
cvtColor(goruntu, yeni, CV_BGR2GRAY); //kameradan alınan görüntü gri formata dönüştürüldü
calcOpticalFlowPyrLK(eski, yeni, oncekiNokta, sonrakiNokta, durum, hata); //eski resimdeki noktayı yeni resimde arar
//takip edilen nokta yerine beyaz piksel koyuyor
line(goruntu, sonrakiNokta[0], sonrakiNokta[0], Scalar(0, 0, 255), 3, 8, 0);
imshow("Nokta Takibi", goruntu);
oncekiNokta[0] = sonrakiNokta[0]; //sonraki bulunan noktayı önceki nokta yapar.
if (durum[0] == 1)
{
cout << "nokta bulundu" << endl;
}
else
cout << "nokta kayboldu" << endl;
if (waitKey(30) == 27)
{
break;
}
}
return 0;
}


