opencv c++ 滚动条随着视频播放而滚动

#include <opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;

#define WINDOW_NAME_ORIGINAL "[原视频]" //为窗口标题定义的宏

全局变量/

VideoCapture g_capture;
int g_slider_position = 0;
int cur_frame = 0;         //增加全局变量,指示g_capture的当前帧

onTrackbarSlide/
void onTrackbarSlide(int pos,void*)
{
	if (pos != cur_frame)     //如果回调函数onTrackbarSlide(int pos)中当前的函数参数pos与全局变量相等,
		//说明是滚动条自动移动造成的调用,不必重新设置g_capture的当前帧。。
	{
		g_capture.set(CV_CAP_PROP_POS_FRAMES, pos);
	}
}

main()函数

int main(int argc, char** agrv)
{
	namedWindow(WINDOW_NAME_ORIGINAL, CV_WINDOW_AUTOSIZE);
	g_capture.open("1.mov");
	int frames = g_capture.get(CV_CAP_PROP_FRAME_COUNT);
	char TrackbarName[50];
	sprintf(TrackbarName, "帧数值 %d", frames);

	if (frames != 0)
	{
		createTrackbar(TrackbarName, WINDOW_NAME_ORIGINAL, &g_slider_position, frames, onTrackbarSlide);
	};

	Mat frame;

	while (1)
	{
		g_capture.read(frame);
		if (!g_capture.grab()) break;
		imshow(WINDOW_NAME_ORIGINAL, frame);

		cur_frame = g_capture.get(CV_CAP_PROP_POS_FRAMES);//提取当前帧         
		setTrackbarPos(TrackbarName, WINDOW_NAME_ORIGINAL, cur_frame);
		char c = (char)
		waitKey(50);
		if (c == 27)  break;
	}
	return 0;
}

引用:http://blog.sina.com.cn/s/blog_4b826e5b01015xoj.html
根据C 版本改写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值