嗨,我正在閱讀一本書「學習openCV」,在我遇到問題的早期示例中。OpenCV TrackbarSlider奇怪的行爲
我想建立一個小視頻播放器,它可以前進和後退一幀,可以通過輸入幀號並通過TrackbarSlider瀏覽幀來跳轉到特定幀。 TrackbarSlider還應該顯示當前的幀號。
目前我只實現了TrackbarSlider。 我希望它能夠計算我的視頻的幀數,如果我在特定位置單擊它,視頻應該從該位置繼續播放。
不幸的是,這並沒有發生。 如果我單擊滑塊中的任何位置,則視頻從第0幀滑塊開始也會重置到此位置。
Aswell我不明白爲什麼控制檯顯示我發生幻燈片發生後幀號重置爲0。 (我知道,滑塊位置從一幀到下一幀的運動導致回調到onTrackbarSlide())
// Example2-3.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include <iostream>
int g_slider_position = 0;
CvCapture* g_capture = NULL;
void onTrackbarSlide(int pos)
{
cout << "TrackbarSlide occured " << endl;
cout << "pos: " << pos << endl;
cvSetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES, pos);
cout << "Framenumber after SetTrackbarPos ";
cout << cvGetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES) << endl;
}
int main(int argc, char* argv[])
{
cout << "TEST" << endl;
cvNamedWindow("Example3", CV_WINDOW_AUTOSIZE);
g_capture = cvCreateFileCapture("test.avi");
//g_capture = cvCreateFileCapture(argv[1]);
int frames = (int) cvGetCaptureProperty(g_capture, CV_CAP_PROP_FRAME_COUNT);
if (frames != 0)
{
cvCreateTrackbar("Position","Example3",&g_slider_position,frames,onTrackbarSlide);
}
IplImage* frame;
while(1)
{
frame = cvQueryFrame(g_capture);
if(!frame) break;
cvShowImage("Example3",frame);
char c = cvWaitKey(250);
if(c==27) break;
cout << "Framenumber ";
cout << cvGetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES) << endl;
cvSetTrackbarPos("Position", "Example3", cvGetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES));
}
cvReleaseCapture(&g_capture);
cvDestroyWindow("Example3");
return 0;
}
多數民衆贊成我從控制檯中看到: 控制檯輸出:http://s14.directupload.net/images/120422/9cdu7mhk.png
忘記感興趣的提...以下網站可以:OpenCV - getting the slider to update its position during video playback
謝謝 eujono