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模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓