基于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_FORMAT | resolve()返回的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_FORMAT | resolve()返回的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 |