Bunu, izleme algoritmamın bir temeli olarak kullanmak için kullanıyorum.Optik akış kullanarak OpenCV izleme
//1. detect the features
cv::goodFeaturesToTrack(gray_prev, // the image
features, // the output detected features
max_count, // the maximum number of features
qlevel, // quality level
minDist); // min distance between two features
// 2. track features
cv::calcOpticalFlowPyrLK(
gray_prev, gray, // 2 consecutive images
points_prev, // input point positions in first im
points_cur, // output point positions in the 2nd
status, // tracking success
err); // tracking error
cv::calcOpticalFlowPyrLK
giriş olarak bir önceki görüntü noktalarının vector alır ve bir sonraki resim üzerinde uygun noktaları döndürür. Bir önceki resimde rastgele piksel (x, y) olduğunu varsayalım, OpenCV optik akış fonksiyonunu kullanarak bir sonraki resimde bu pikselin konumunu nasıl hesaplayabilirim?
Sadece bir defada özellik tespiti yaptığınızı görüyorum. Bu kodu test ettim. Sadece ilk görüntüde tespit edilen özelliklerin izlenebildiğini buldum. Tüm bu özellikler görüntünün ötesine geçerse, izlenmesi gereken bir özellik yoktur. 3D konstrüksiyon için optik akış kullanmam gerekiyor. O zaman eski özellikleri sürekli olarak nasıl izleyebiliriz ve bu arada yeni görüntü özellikleri ekleyebiliriz? Teşekkürler. – Shiyu
Evet, yalnızca 'goodFeaturesToTrack' ile özellikleri algılarsınız, daha sonra optik akış yöntemi bunları izler. Her bir karede belirli sayıda özelliği korumak istiyorsanız, mevcut kareye kaç tane özelliğin başarılı bir şekilde izlendiğini tespit etmeli ve ardından bir sonraki kareye izlenecek ekleri tespit etmeye çalışmalısınız. Bir alternatif, her karedeki özellikleri tespit etmek ve sonra tanımlayıcıları hesaplamak ve bu tanımlayıcıları [bu sayfadaki] işlevleri kullanarak eşleştirmektir (http://opencv.itseez.com/modules/features2d/doc/features2d.html). – Chris
Daha fazla ayrıntıya ihtiyacınız varsa, yeni bir soru sormak daha iyi olur. – Chris