《学习OpenCV(中文版)》
作者:(美)布拉德斯基(Bradski,G.),
(美)克勒(Kaehler,A.) 著
出版社:清华大学出版社
出版时间:2009年10月
一、简单的播放视频程序
- 1、读取视频文件
- 2、循环顺序读取视频中的每一帧
- 3、如何退出循环。
二、VideoCapture类
Opencv中提供了专门操作视频的接口类VideoCapture,VideoCapture类可以从文件或摄像头设备中读取视频,提供常用的三种构造方法如下:
- VideoCapture::VideoCapture();
- VideoCapture::VideoCapture(const string &filename);
参数filename表示视频文件的路径及名称; - VideoCapture::VideoCapture(int device);
device表示打开视频操作索引号设置,如果是摄像头则设置为0。
三、VideoCapture方法
函数 | 功能 |
---|---|
open | 打开视频文件或视频获取装置 |
isOpened | 判断视频文件是否正确,返回true则正确 |
release | 关闭视频流文件 |
grab | 抓住下一帧的视频文件或捕获设备 |
retrieve | 解码并返回了视频帧 |
read | 抓住,解码并返回下一个视频帧 |
get | 返回指定视频类的相关参数信息 |
set | 设置类信息的一个属性 |
- read方法的输入是Mat的引用,这种方式得到的实际是VideoCapture解析得到的单帧图像的引用,当后续再读取帧时,Mat数据将会自动释放,自动更新成新的数据信息。
- Mat复制构造函数和赋值操作共享数据空间,当需要同时获取多帧图像源时,可以利用Mat提供的Mat.clone()方法进行复制操作。
四、程序
参考: C#安装OpenCvSharp4的实操
1、程序C220807:从磁盘加载并在屏幕上播放视频的OpenCV程序。
using OpenCvSharp;
using OpenCvSharp.Extensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CvSharpDemo
{
class Program
{
static void Main(string[] args)
{
// 视频地址
string videoPath = @"e://opencv//1.avi";
// 打开视频文件
VideoCapture cap= VideoCapture.FromFile(videoPath);
//检查视频是否成功打开
if (!cap.IsOpened())
return;
//取得帧速率
double rate = cap.Fps;
bool stop = false;
Mat frame=new Mat();
// 根据帧速率计算帧之间的等待时间,单位为ms
int delay = ((int)(1000 / rate)) ;
//循环遍历视频中的全部帧
while (!stop)
{
//读取下一帧,如果有
if (!cap.Read(frame))
break;
Cv2.ImShow("播放视频", frame);
//延时等待按键按下
if (Cv2.WaitKey(delay) >= 0)
stop = true;
}
cap.Release();
}
}
}