2017-11-24 30 views
1

ich eine calcOpticalFlowPyrLK machen will von Merkmalspunkten von Bild zu erhalten, wenn ich goodFeaturesToTrack verwenden, ist alles in Ordnung, wie folgend:Wie KeyPointVector übertragen Mat in javaCV

goodFeaturesToTrack(blackOutImagePrev, prevCorners, 200, 0.04, 30); 
calcOpticalFlowPyrLK(blackOutImagePrev, blackOutImageNext, prevCorners, nextCorners, status, err); 

Durch die Ausgabe der Verarbeitungsgeschwindigkeit, I will die Funktion ändern, dass ich Feature Punkte zum surfen oder schnellen Verfahren bekomme. Für die Brandung, die Funktion ist:

final KeyPointVector kp = new KeyPointVector(); 
final SURF surf = SURF.create(2500, 4, 2, true, false); 
surf.detect(image, kp); 

Da die Surf-get-Feature-Punkte in KeyPointVector gespeichert sind, aber die Art des prevCorners ist Mat. Wie könnte ich es auf Mat übertragen, damit ich calcOpticalFlowPyrLK aufrufen kann? Oder gibt es einen Workaround?

+1

Sieht aus wie ein ['KeyPointVector'] (http://bytedeco.org/javacpp-presets/opencv/apidocs/org/bytedeco/javacpp/opencv_core.KeyPointVector.html) ist nur ein Vektor von [' KeyPoints'] (http://bytedeco.org/javacpp-presets/opencv/apidocs/org/bytedeco/javacpp/opencv_core.KeyPoint.html). Der 'KeyPoints' -Typ hat die [' pt() 'Methode] (http://bytedeco.org/javacpp-presets/opencv/apidocs/org/bytedeco/javacpp/opencv_core.KeyPoint.html#pt--) was wird gebe ein 'Point2f' zurück, mit dem du eine' Mat' konstruieren kannst. Erstelle also die neue "Mat" und durchlaufe den Keypoints-Vektor, hole die Punkte mit 'pt()' und füge ein. –

+0

Danke, ich habe es versucht, es funktioniert. –

+0

Großartig! Ich habe es als Antwort hinzugefügt. –

Antwort

1

Sieht aus wie ein KeyPointVector ist nur ein Vektor von KeyPoints. Der KeyPoints-Typ hat die pt() method, die eine Point2f zurückgibt, die Sie mit Mat erstellen können. So erstellen Sie die neue Mat, und durchlaufen Sie die Keypoints Vektor, erhalten Sie die Punkte mit pt() und einfügen.