openCV1.0 播放AVI视频并实现进度条
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openCV1.0 播放AVI视频并实现进度条相关的知识,希望对你有一定的参考价值。
#include "cv.h"
#include "highgui.h"
int g_slider_position = 0;
CvCapture* g_capture = NULL;
void onTrackbarSlide(int pos) {
cvSetCaptureProperty(g_capture, CV_CAP_PROP_POS_FRAMES, pos);
}
int main(int argc, char **argv)
{
cvNamedWindow("Example3", CV_WINDOW_AUTOSIZE);
if (argc == 2 && (g_capture = cvCreateFileCapture(argv[1])) != 0)
{
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(33);
if (c == 27) break;
}
cvReleaseCapture(&g_capture);
cvDestroyWindow("Example3");
return 0;
}
return -1;
}
运行效果如下:
本代码段通过一个全局变量读取滚动条位置并且当滚动条位置发生变化时通过回调函数调用重新设置视频读入位置。
int g_slider_position = 0;
CvCapture* g_capture = NULL;
g_slider_position是滚动条的位置, g_capture是回调函数的input参数。
void onTrackbarSlide(int pos){
cvSetCaptureProperty(
g_capture,
CV_CAP_POS_PRAMES,
pos);
}
onTracebarSlide是一个回调函数,目的是在每一次进度条有变化的时候通知图像加载到进度条指向的那一帧。cvCreateTrackbar函数的第五个参数实现onTracebarSlide的注册。
本程序中我们设置参数CV_CAP_PROP_POS_PRAMES,本参数表示以帧数来设置读入位置,如果想通过以视频长度比例来设置读入位置,我们可以通过AVI_RATIO代替FRAMES来实现。
cvCreateTrackbar()可设置滚动条的名称并确定滚动条的所属窗口。
以上是关于openCV1.0 播放AVI视频并实现进度条的主要内容,如果未能解决你的问题,请参考以下文章
VS2008中Slider控件制作播放器的进度条,如何在视频播放时改变滑块位置