opencv之播放视频、添加进度条

基于opencv3.4.7 编程环境win10+VS2017、ubuntu18.04+Codelite

opencv读取视频demo程序

#include <iostream>  
#include <fstream>
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp> 
#include <opencv2/imgproc/imgproc_c.h>

#define Pic_Path "/home/image/Pictures/" 
#define Pic_Name "demo.jpg" 

#define Video_Path "E:\\video\\"
#define Video_Name "test1.mp4"

using namespace std;

int g_slider_position = 0;
int g_run = 1;
cv::VideoCapture g_cap;

//滑动条滑动时 触发该函数 将视频的当前帧雨进度条相对应
void onTrackbarSlide(int pos, void *)
{
	g_cap.set(cv::CAP_PROP_POS_FRAMES, pos);
}


int main(int argc, char **argv)
{
	string pic = string(Pic_Path) + string(Pic_Name);
	cout << pic << endl;

	//获取视频完整路径及名称
	string video = string(Video_Path) + string(Video_Name);
	cout << video << endl;

	//创建窗口
	cv::namedWindow("demo3", cv::WINDOW_AUTOSIZE);

	//导入视频
	g_cap.open(video);

	//获取视频总帧数 分辨率 宽 高
	int frames = (int)g_cap.get(cv::CAP_PROP_FRAME_COUNT);
	int tmpw = (int)g_cap.get(cv::CAP_PROP_FRAME_WIDTH);
	int tmph = (int)g_cap.get(cv::CAP_PROP_FRAME_HEIGHT);
	cout << "Video has " << frames << " frames of dimensions(" << tmpw << "," << tmph << ")." << endl;

	//创建滑动条 
	//参数1 滑动条名称
	//参数2 窗口名称
	//参数3 滑动条起始位置
	//参数4 总数 这里表示总帧数
	//参数5 滑动条移动时调用的回调函数
	cv::createTrackbar("Position", "demo3", &g_slider_position, frames, onTrackbarSlide);

	//定义图像结构
	cv::Mat frame;

	for (;;)
	{
		//如果g_run参数不为0 
		if (g_run != 0)
		{
			g_cap >> frame;
			if (frame.empty())
				break;
			//获取当前帧
			int current_pos = (int)g_cap.get(cv::CAP_PROP_POS_FRAMES);
			
			//视频播放与进度条能够同步
			cv::setTrackbarPos("Position", "demo3", current_pos);
			cv::imshow("demo3", frame);

			g_run -= 1;
		}
		//判断按键输入  修改播放模式
		char c = (char)cv::waitKey(30);
		if (c == 's')
		{
			g_run = 1;
			cout << "Single step,run = " << g_run << endl;
		}
		if (c == 'r')
		{
			g_run = -1;
			cout << "Run mode , run = " << g_run << endl;
		}
		if (c == 'q')
			break;
	}
	return 0;
}

设置视频

1 // 第100帧
2 double position=100.0;
3 capture.set(CV_CAP_PROP_POS_FRAMES,position);
4 // 第1e6毫秒
5 double position=1e6;
6 capture.set(CV_CAP_PROP_POS_MSEC,position);
7 // 视频1/2位置
8 double position=0.5;
9 capture.set(CV_CAP_PROP_POS_AVI_RATIO,position);

获取视频

double rate=capture.get(CV_CAP_PROP_FPS); // 获取帧率
long nFrame=static_cast<long>(capture.get(CV_CAP_PROP_FRAME_COUNT)); // 获取总帧数

VideoCapture::get(int id)

参数名称作用
CAP_PROP_POS_MSEC视频文件的当前位置,以毫秒为单位或视频捕获时间戳。
CAP_PROP_POS_FRAMES接下来要解码/捕获的帧的基于0的索引。
CAP_PROP_POS_AVI_RATIO视频文件的相对位置:0-电影的开始,1-电影的结束。
CAP_PROP_FRAME_WIDTH视频流中帧的宽度。
CAP_PROP_FRAME_HEIGHT视频流中帧的高度。
CAP_PROP_FPS帧频。
CAP_PROP_FOURCC编解码器的4个字符的代码。
CAP_PROP_FRAME_COUNT视频文件中的帧数。
CAP_PROP_FORMATresolve()返回的Mat对象的格式。
CAP_PROP_MODE特定于后端的值,指示当前的捕获模式。
CAP_PROP_BRIGHTNESS图像的亮度(仅适用于相机)。
CAP_PROP_CONTRAST图像的对比度(仅适用于相机)。
CAP_PROP_SATURATION图像的饱和度(仅适用于相机)。
CAP_PROP_HUE图像的色相(仅适用于相机)。
CAP_PROP_GAIN图像的增益(仅适用于相机)。
CAP_PROP_EXPOSURE曝光(仅适用于相机)。
CAP_PROP_CONVERT_RGB布尔型标志,指示是否应将图像转换为RGB。
CAP_PROP_WHITE_BALANCE当前不支持
CAP_PROP_RECTIFICATION立体摄像机的整流标志(注意:当前仅受DC1394 v 2.x后端支持)
如果查询的视频属性是VideoCapture类不支持的,将会返回0

VideoCapture::set(int id,double value)

参数名称作用
CAP_PROP_POS_MSEC视频文件的当前位置,以毫秒为单位或视频捕获时间戳。
CAP_PROP_POS_FRAMES接下来要解码/捕获的帧的基于0的索引。
CAP_PROP_POS_AVI_RATIO视频文件的相对位置:0-电影的开始,1-电影的结束。
CAP_PROP_FRAME_WIDTH视频流中帧的宽度。
CAP_PROP_FRAME_HEIGHT视频流中帧的高度。
CAP_PROP_FPS帧频。
CAP_PROP_FOURCC编解码器的4个字符的代码。
CAP_PROP_FRAME_COUNT视频文件中的帧数。
CAP_PROP_FORMATresolve()返回的Mat对象的格式。
CAP_PROP_MODE特定于后端的值,指示当前的捕获模式。
CAP_PROP_BRIGHTNESS图像的亮度(仅适用于相机)。
CAP_PROP_CONTRAST图像的对比度(仅适用于相机)。
CAP_PROP_SATURATION图像的饱和度(仅适用于相机)。
CAP_PROP_HUE图像的色相(仅适用于相机)。
CAP_PROP_GAIN图像的增益(仅适用于相机)。
CAP_PROP_EXPOSURE曝光(仅适用于相机)。
CAP_PROP_CONVERT_RGB布尔型标志,指示是否应将图像转换为RGB。
CAP_PROP_WHITE_BALANCE当前不支持
CAP_PROP_RECTIFICATION立体摄像机的整流标志(注意:当前仅受DC1394 v 2.x后端支持)
如果查询的视频属性是VideoCapture类不支持的,将会返回0
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值