#include "stdio.h"
#include "stdafx.h"
#include "highgui.h"
#include <cv.h>
#include <cxcore.h>
#include "iostream"
using namespace std;
using namespace cv;
int g_slider_position = 0;
CvCapture* g_capture = NULL;
const char* window_name = "The Tom 'n Jerry Show";
const char* trackbar_name = "Position";
void onTrackbarSlide( int pos )
{
cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);
g_slider_position = pos;
}
int main(int argc, char** argv)
{
cvNamedWindow(window_name, CV_WINDOW_AUTOSIZE);
g_capture = cvCreateFileCapture("D:\\C++ Projects\\OpenCV_project\\test_video\\gate_11ms_00-30s.avi");
int frames = (int) cvGetCaptureProperty(
g_capture,
CV_CAP_PROP_FRAME_COUNT
);
if (frames != 0)
{
cvCreateTrackbar(
trackbar_name,
window_name,
&g_slider_position,
frames,
onTrackbarSlide
);
}
IplImage* frame;
while (1)
{
frame = cvQueryFrame(g_capture);
if (!frame)
break;
trackbar_name,
window_name,
g_slider_position+1
);
*/
cvShowImage(window_name, frame);
char c = cvWaitKey(33);
if (c == 27)
break;
}
cvReleaseCapture(&g_capture);
cvDestroyWindow(window_name);
return 0;
}
#include "stdafx.h"
#include "highgui.h"
#include <cv.h>
#include <cxcore.h>
#include "iostream"
using namespace std;
using namespace cv;
int g_slider_position = 0;
CvCapture* g_capture = NULL;
const char* window_name = "The Tom 'n Jerry Show";
const char* trackbar_name = "Position";
void onTrackbarSlide( int pos )
{
cvSetCaptureProperty(g_capture,CV_CAP_PROP_POS_FRAMES,pos);
g_slider_position = pos;
}
int main(int argc, char** argv)
{
cvNamedWindow(window_name, CV_WINDOW_AUTOSIZE);
g_capture = cvCreateFileCapture("D:\\C++ Projects\\OpenCV_project\\test_video\\gate_11ms_00-30s.avi");
int frames = (int) cvGetCaptureProperty(
g_capture,
CV_CAP_PROP_FRAME_COUNT
);
if (frames != 0)
{
cvCreateTrackbar(
trackbar_name,
window_name,
&g_slider_position,
frames,
onTrackbarSlide
);
}
IplImage* frame;
while (1)
{
frame = cvQueryFrame(g_capture);
if (!frame)
break;
/* 此函数会让视频画面出现长时间静止不动. 去掉之后trackbar能实现拖动播放的功能.
如果回调函数onTrackbarSlide 不设置capture的当前帧数,set函数能正常工作.
跟踪内存发现 加上settrackbar函数后,capture的帧数会静止到一个固定值.不知道是不是溢出造成的.如果是,那么可能是cvSetTrackbarPos 和 onTrackbarSlide 相互调用造 成的. 但是onTrackbarSlide函数无法跟踪,因为在断点模式下只能到达一次.
待解决*******
cvSetTrackbarPos(trackbar_name,
window_name,
g_slider_position+1
);
*/
cvShowImage(window_name, frame);
char c = cvWaitKey(33);
if (c == 27)
break;
}
cvReleaseCapture(&g_capture);
cvDestroyWindow(window_name);
return 0;
}