Verwirrendes Verhalten bei OpenCV - getCaptureProperty
-
Hallo,
ich habe arbeite mich gerade in Open CV ein und habe ein für mich etwas verwirrendes Verhalten. Folgenden Code
void moveTo(int pos){ cvSetCaptureProperty(capture,CV_CAP_PROP_POS_FRAMES,pos); frame = cvQueryFrame( capture ); cvShowImage( "Video", frame ); } void prevFrame(){ int pos= (int) cvGetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES); moveTo(pos-1); } void nextFrame(){ int pos= (int) cvGetCaptureProperty(capture, CV_CAP_PROP_POS_FRAMES); moveTo(pos+1); }
verwende ich, um einen Frame vor und einen Frame zurück zu springen. Allerdings springt er leider 0 frames vor und 2 frames zurück. Das erwünschte Verhalten erlange ich mit:
moveTo(pos);
und
moveTo(pos-2);
Kann mir jemand diese Verschiebung erklären? Warum wird beim Abfragen und erneuten setzen der unveränderten Position diese um 1 Frame reduziert?
Anmerkung an die Mods: Es kann sein, dass dieser Beitrag zweimal vorhanden ist. Einmal unangemeldet und nun angemeldet. Sollte das der Fall sein, bitte löscht den anderen Beitrag.
-
Ach Mist! Mir ist gerade aufgefallen, dass ich hier im Forum die Vorzeichen natürlich verdreht habe:
moveTo(pos+2);
muss es heißen, damit mit cvQueryFrame anschließend der nächste frame abgefragt wird. Wenn man cvQueryFrame in einer Schleife ausführt, wird ja das komplette Video abgespielt.
Ich kann mir das nur so erklären, dass cvQueryFrame, den Frame nimmt, der vor der Position des Positionszeigers des capture Objektes liegt. Dann würde pos + 2 - 1= pos +1 und pos zu pos -1.
Verwirrend finde ich es trotzdem.