cvCreateTrackbar函数中count的最大值

经过测试发现,cvCreateTrackbar函数中count参数的最大值是32767,如果调用函数时count>32767,那么滚动条将会不能拖动。

如果视频的总帧数大于32767,那么可以考虑使用目前帧数占总帧数的百分比来显示滚动条。

我的处理方式如下,但是会有播放速度过快的问题,正在想办法解决,大家有什么好办法欢迎给我留言:

#include<highgui.h>

CvCapture* capture = NULL;
int next_frame = 0;
int amount = 34225;//经过调试的值,用cvGetCaptureProperty得到的不是真实值
int rate = 0;
int position = 0;

void on_change(int pos)
{
	next_frame = ((double)pos/32767)*amount;
	printf("%d,%d\n" , pos , next_frame);
	cvSetCaptureProperty(capture , CV_CAP_PROP_POS_FRAMES , next_frame);
	position = pos;
}

void main()
{
	cvNamedWindow("myVideoPlayer");
	capture = cvCreateFileCapture("F:\\Youku Files\\transcode\\第四集.avi");
	
	IplImage* frame = NULL;
	frame = cvQueryFrame(capture);
	if(frame == NULL)
	{
		return;
	}
	cvShowImage("myVideoPlayer",frame);

	
	//amount = (int)cvGetCaptureProperty(capture , CV_CAP_PROP_FRAME_COUNT);
	//printf("%d\n" , amount);
	rate = (int)cvGetCaptureProperty(capture , CV_CAP_PROP_FPS);
	printf("%d\n" , rate);
	if(amount)
	{
		//cvCreateTrackbar("Position" , "myVideoPlayer" , &position , amount , NULL);//amount超过了count参数的最大值32767,所以不能拖动
		cvCreateTrackbar("Position" , "myVideoPlayer" , &position , 32767 , on_change);
	}

	while(true)
	{
		frame = cvQueryFrame(capture);
		if(frame == NULL)
		{
			break;
		}
		cvShowImage("myVideoPlayer",frame);
		//++position;
		++position; //我觉得position应该增加32767/34225,但cvSetTrackbarPos的position必须是整型,所以最少只能增加1了
		cvSetTrackbarPos("Position" , "myVideoPlayer" , position);//添加了这条语句会使视频播放速度看上去加快了,因为cvSetTrackbarPos会调用on_change函数,由于视频的帧数大于cvCreateTrackbar能设置的最大帧数,所以position增加1,就会导致next_frame增加1.04,即下一帧是当前帧后的第1.04帧
		char c = cvWaitKey(1000/rate);
		if(c == 27)
		{
			break;
		}
	}
	cvReleaseCapture(&capture);
	cvDestroyWindow("myVideoPlayer");
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值