OpenCV-tracking mit optical flow
Ich dies verwenden, um Funktionen als Basis meiner tracking-Algorithmus.
//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
nimmt-Vektor, der die Punkte aus dem vorherigen Bild als Eingabe und gibt entsprechende Punkte auf das nächste Bild. Angenommen ich habe zufällig pixel (x, y) aus dem vorherigen Bild, wie kann ich berechnen position dieses pixels auf dem nächsten Bild mit OpenCV optical-flow-Funktion?
InformationsquelleAutor der Frage Alex Hoppus | 2012-03-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie Sie schreiben,
cv::goodFeaturesToTrack
nimmt ein Bild als Eingabe und produziert einen Vektor von Punkten, die es hält, "gut auf schiene". Diese werden ausgewählt nach Ihrer Fähigkeit, um sich von Ihrer Umgebung, und sind basierend auf der Harris-Ecken im Bild. Ein tracker normalerweise initialisiert werden, indem Sie übergeben das erste Bild zu goodFeaturesToTrack und erhalten einen Satz von Funktionen zu verfolgen. Diese Funktionen könnten dann weitergegeben werden, umcv::calcOpticalFlowPyrLK
wie die vorherigen Punkte, zusammen mit dem nächsten Bild in der Sequenz, und es wird die nächsten Punkte, die als Ausgabe, die dann Eingang Punkte in der nächsten iteration.Wenn Sie möchten, um zu versuchen, um zu verfolgen eine andere Gruppe von Pixeln (statt erzeugten Merkmale durch
cv::goodFeaturesToTrack
oder eine ähnliche Funktion), dann geben Sie einfach diesecv::calcOpticalFlowPyrLK
zusammen mit dem nächsten Bild.Sehr einfach, im code:
InformationsquelleAutor der Antwort Chris
cv::calcOpticalFlowPyrLK(..) Funktion Argumente verwendet :
cv::calcOpticalFlowPyrLK(prev_gray, curr_gray, features_prev, features_next, status, err);
einfachste(Teil -) code zu finden, der pixel im nächsten Bild :
Wenn pixel wurde erfolgreich gefunden
status[0] == 1
undfeatures_next[0]
zeigt die Koordinaten der pixel im nächsten Bild. Wert Informationen gefunden werden können in diesem Beispiel:OpenCV/samples/cpp/lkdemo.cpp
InformationsquelleAutor der Antwort MSeskas