OpenCV视频处理

1、VideoCapture对象

cv::VideoCapture根据数据来源的不同,有三种构建方式:

cv::VideoCapture::VideoCapture(const string& filename); //从视频文件获取数据
cv::VideoCapture::VideoCapture(int device); //从设备中获取
cv::VideoCapture::VideoCapture();

如果打开成功cv::VideoCapture::isOpened()会返回true。请在每次打开文件或者设备
时,使用isOpened()检查是否打开成功。

1.1、相机的域

相机的域指示HighGUI应该如何匹配相机。

 

cv::VideoCapture cap;
cap.open("my_video.avi");
//等效于
cv::VideoCapture cap("my_video.avi");

2、从视频流中读取图像

2.1、read()函数读取数据

bool cv::VideoCapture::read(cv::OutputArray image);
  • image: 从视频流中读取的一帧数据
  • return: 成功返回true,失败或者已读取完文件最后一帧,返回false。

2.2、重载符>>读取数据

cv::VideoCapture& cv::VideoCapture::operator>>(cv::Mat& image);

由于这是一个流操作符,所以无论读取成功与否,它都会返回一个对最初的cv::Capture对象的引用。除此之外,它与read()函数的功能完全相同。

2.3、grab()和retrieve()读取

在多相机数据读取时,我们希望获取每个相机数据时,尽可能的快,从而减少相机直接的时间差。所以出现了捕获(grab)和恢复(retrieve)分开的应用场景。read()函数就是一次完整的

grab()和retrieve()过程。

bool cv::VideoCapture::grab(void);
bool cv::VideoCapture::retrieve(cv::OutputArray image, int channel=0);

params:

image 获取的帧数据

channel 在多相机时,指定相机的设备号

return:

ture 获取数据成功

false 获取数据失败

3、相机属性

3.1、获取相机属性

视频文件不仅包含一帧一帧的图像,还有许多元数据(meta data),这些数据会被拷贝到cv::VideoCapture对象内部的数据区。

double cv::VideoCapture::get(int propid); //Property identifier

常见的属性ID表如下:

 

FOURCC转换为char类型

cv::VideoCapture cap("my_video.avi");
unsigned f = (unsigned)cap.get(cv::CAP_PROP_FOURCC);
char fourcc[] = {
    (char)f,
    (char)(f >> 8),
    (char)(f >> 16),
    (char)(f >> 24),
    '\0'
};

3.2、设置相机属性

bool cv::VideoCapture::set(int propid, double value); 

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值