cvSetTrackbarPosでトラックバーを移動させるとすぐに終了してしまう
OpenCV初心者です。
トラックバーの位置に応じて動画をジャンプする機能を付けたいのですが、cvSetTrackbarPosで動画再生中にトラックバーが移動できるようにすると1フレーム表示されてすぐに終了してしまいます。
http://opencv.jp/opencv-2svn/cpp/reading_and_writing_images_and_video.html
のパラメタを見ながら色々設定を変えたのですがどうしても1フレーム表示されてすぐに終了してしまいます。
なぜ、1フレーム表示されてすぐに終了してしまうのかわかりません。どのようにしたら動画を最後まで再生さることができるようになりますか
#include<opencv/highgui.h>
#include<opencv/cv.h>
#include<iostream>
#include <cstdlib>
using namespace std;
int g_slider_position=0;
int g_point=0;
CvCapture* g_capture=NULL;
//トラックバー移動時のコールバック
void onTrackbarSlide(int pos){
cvSetCaptureProperty(g_capture,
CV_CAP_PROP_POS_AVI_RATIO,
pos
);
cvSetTrackbarPos("Position","Example3",pos);
}
int main(int argc, char** argv)
{
const char Wname[]="Example3";
cvNamedWindow(Wname,CV_WINDOW_AUTOSIZE);
g_capture=cvCreateFileCapture(argv[1]);
//現在の位置を100分率で表すため
int frames =100;
//トラックバーをフレーム数に応じて利用していたため
(int) cvGetCaptureProperty(
g_capture,
CV_CAP_PROP_FRAME_COUNT
);
IplImage* frame;
if(frames!=0){
//トラックバーの作成
cvCreateTrackbar(
"Position",
Wname,
&g_slider_position,
frames,
onTrackbarSlide
);
}
while(1){
frame =cvQueryFrame(g_capture);
if(!frame)break;
cvShowImage(Wname,frame);
char c=cvWaitKey(1000);
if(c==27)break;
//コメントを外すと正しく動かない
// cvSetTrackbarPos("Position",Wname,(int) cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT)*100);
}
return 0;
}