OpenCV播放视频 1加上滚动条 2加随视频播放自动滚动的滚动条

1:
#include "stdafx.h"

// CV模块中包含了图像处理,图像结构分析
// 运动描述和跟踪,模式识别和摄像机标定
#include"cv.h"

//包含了图像和视频的输入和输出
#include"highgui.h"

// 用来标定滚动条当前的位置
 int g_Pos = 0;

 // 将打开的视频文件作为一个全局变量使用
 CvCapture* g_Capture = NULL;

 // 当拖动滚动条后,会回调这个函数
 // 同时会将当前滚动条的位置以32位形式传递过来
 void CallBackTrackBarSlide(int pos)
 {
	 // 这里便是重新设置的视频文件当前播放的帧
	cvSetCaptureProperty(g_Capture,CV_CAP_PROP_POS_FRAMES,pos);
 }

 // 主函数
 int main(int argc, char** argv)
 { 
	 // 创建一个名为vediox的窗口 
	cvNamedWindow("vediox",CV_WINDOW_AUTOSIZE);

	 // 根据参数打开指定的视频文件
	g_Capture = cvCreateFileCapture("vedio.avi");

	 // 获取总的帧数
	int totalFrames = 
		(int) cvGetCaptureProperty(g_Capture,CV_CAP_PROP_FRAME_COUNT);

	if(totalFrames != 0)
	{    
		// 创建滚动条,在这里指定了滚动条拖动后的回调函数
		cvCreateTrackbar("TrackBar","vediox",&g_Pos,totalFrames,CallBackTrackBarSlide);
	}

	IplImage* frame;
	 // 循环地顺序遍历所有的帧
	while(1)
	{
		// 获取当前帧的下一个帧,并将其加载到内存中
		frame = cvQueryFrame(g_Capture);
		if(!frame)
		{
			break;
		}
		cvShowImage("vediox",frame);
		char chKeyCode = cvWaitKey(30);
		if(chKeyCode == 27)
		{
			break;
		}
	}

	cvReleaseCapture(&g_Capture);
	cvDestroyWindow("vediox");

	return 0;
 }

2:

#include "stdafx.h"

// CV模块中包含了图像处理、图像结构分析,运动描述和跟踪,模式识别和摄像机标定
#include"cv.h"

//包含了图像和视频的输入/ 输出
#include "highgui.h"

// 用来标定滚动条当前的位置
int g_Pos = 0;

// 将打开的视频文件作为一个全局变量使用
CvCapture* g_Capture = NULL;

// 当拖动滚动条后,会回调这个函数
// 同时会将当前滚动条的位置以32位形式传递过来
void CallBackTrackBarSlide(int pos)
{
	// 这里便是重新设定视频文件当前播放的帧
	cvSetCaptureProperty(g_Capture,CV_CAP_PROP_POS_FRAMES,pos);
	g_Pos = pos;
}

int main(int argc, char** argv)
{
	// 建立一个名字加vedio的窗体
	cvNamedWindow("vedio",CV_WINDOW_AUTOSIZE);
	// 根据参数打开指定的视频文件
	g_Capture = cvCreateFileCapture("vedio.avi");

	// 获得总的帧数
	int totalFrames = 
		(int)cvGetCaptureProperty(g_Capture,CV_CAP_PROP_FRAME_COUNT);
	if(totalFrames != 0)
	{
		//创建滚动条,在这里指定了滚动条拖动后的回调函数
		cvCreateTrackbar("TrackBar","vedio",
			&g_Pos,totalFrames,CallBackTrackBarSlide);
	}

	IplImage* frame;
	// 循环地顺序遍历所有的帧
	while(1)
	{
		// 获取当前帧的下一个帧,并将其加载到内存中
		frame = cvQueryFrame(g_Capture);
		if(!frame)
		{
			break;
		}

		cvShowImage("vedio",frame);
		char chKeyCode = cvWaitKey(30);

		if(chKeyCode == 27)
		{
			break;
		}

		g_Pos++;

		// 当播放完200个帧的时候才触发滚动条滚动
		/*if(g_Pos%200 == 0)
		{
			cvSetTrackbarPos("TrackBar","vedio",g_Pos);
		}
		*/
	   
		// 每播放一个帧便触发滚动条滚动
		cvSetTrackbarPos("TrackBar","vedio",g_Pos);
	}
	
	cvReleaseCapture(&g_Capture);
	cvDestroyWindow("vedio");

	return 0;
}


 

 

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值