opencv Trackbar实现带滚动条的视频播放,且滚动条可自动滑动

为视频添加滚动条,可以实现视频的跳转功能,想播哪里就播哪里,是不是很便捷呢,下面我们就来看看如何实现这个功能,不多说,上代码!
#include "cv.h"
#include "highgui.h"

//全局变量
int g_slider_position = 0; //滚动条的位置
int g_frames = 0; //视频的总帧数
CvCapture *g_capture = NULL;

//滚动条的回调函数
void onTrackbarSlide(int pos)
{
	cvSetCaptureProperty(
		g_capture,
		CV_CAP_PROP_POS_FRAMES,
		pos
	);
}

int main(int argc, char** argv)
{
	g_capture = cvCaptureFromAVI( "D:\\video\\video.short.xvid.avi" );
	g_frames = (int) cvGetCaptureProperty(g_capture,CV_CAP_PROP_FRAME_COUNT); //取出总帧数
	IplImage *inImage = 0;
	IplImage *frame;
	if(g_capture)
	{
		for(;;)
		{
			g_slider_position++; //滚动条位置自动加1,实现自动滑动的关键
			if( !cvGrabFrame(g_capture))
				break;
			frame = cvRetrieveFrame(g_capture);
			if(!frame)
				break;
			if(!inImage)
			{
				inImage = cvCreateImage(
					cvSize(frame->width,frame->height),
					IPL_DEPTH_8U,
					frame->nChannels
				);
			}
			cvCopy(frame, inImage, 0);

			cvNamedWindow("输入视频",1);
			//创建滚动条,必须再循环内创建,才能使滚动条自动滑动而且视频不会出现卡顿。此处注意!
			cvCreateTrackbar("Position","输入视频",&g_slider_position,g_frames,onTrackbarSlide); 
			cvShowImage("输入视频",inImage);

			if(cvWaitKey(10) >= 0)
				break;
		}
		cvReleaseCapture( &g_capture );
		cvReleaseImage( &inImage );
	}
	return 0;
}

效果图:

 
 

你可能感兴趣的:(opencv)