4.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::CAP_ANY0
cv::CAP_MIL100
cv::CAP_VFM200
cv::CAP_V4L200
cv::CAP_V4L2200
cv::CAP_FIREWIRE300
cv::CAP_IEEE1394300
cv::CAP_DC1394300
cv::CAP_CMU1394300
cv::CAP_QT500
cv::CAP_DSHOW700
cv::CAP_PVAPI800
cv::CAP_OPENNI900
cv::CAP_ANDROID1000
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表如下:

视频捕获属性是否只有在摄像头模式下可以使用含义
cv::CAP_PROP_POS_MSEC视频文件中的当前位置(毫秒)或视频捕获的时间戳
cv::CAP_PROP_POS_FRAMES从零开始下一帧的索引
cv::CAP_PROP_POS_AVI_RATIO视频中的相对位置(范围0.0到1.0),滑动条调整时需要用到。
cv::CAP_PROP_FRAME_WIDTH视频帧的像素宽度
cv::CAP_PROP_FRAME_HEIGHT视频帧的像素高度
cv::CAP_PROP_FPS录制视频的帧速率
cv::CAP_PROP_FOURCC四个字符代码指示编解码
cv::CAP_PROP_FRAME_COUNT视频文件中的帧总数,并不完全可靠。
cv::CAP_PROP_FORMAT返回的Mat对象格式(如:CV_8UC3)
cv::CAP_PROP_PROP_MODE表示捕捉模式(如:DC1394)
cv::CAP_PROP_PROP_BRIGHTNESS相机的亮度
cv::CAP_PROP_PROP_COUNTRAST相机的对比度
cv::CAP_PROP_PROP_SATURATION相机的饱和度
cv::CAP_PROP_PROP_HUE相机的色调
cv::CAP_PROP_PROP_GAIN相机的增益设定
cv::CAP_PROP_PROP_EXPOSURE相机曝光设置
cv::CAP_PROP_PROP_CONVERT_RGB如果非0,捕获的图像将被转换为3通道数据
cv::CAP_PROP_PROP_WHITE_BALANCE相机白平衡设置
cv::CAP_PROP_PROP_RECTIFICATION立体相机标志(仅适用于DC1394-2.X)

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); 
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值