用opencv调用USB摄像头帧率低问题解释

当咱们用opencv自带的接口VideoCapture 打开设备自带的摄像头或者usb链接的摄像头时。对于一些高清的摄像头画面有的时候会出现帧率很低的状况(大概是6FPS).画面获取是出现处理的第一步,过低的数据能力会对算法的处理形成必定困扰。linux

本篇博客主要针对摄像头数据流的两种编码方式作个解释和对比,并给出如何解决帧率低的状况。算法

通常的USB接口摄像头输出格式:H.264 、YUYV、MJPEGide

三者的利弊能够查看博客:https://blog.csdn.net/yangdashi888/article/details/52289036函数

通常状况下,咱们会用以下方式获取摄像头数据编码

VideoCapture cap;
cap.open(0);
while(cap.isOpened()){
     Mat in;
    cap >> in;
    ......
}

绝大多数状况下咱们可以实时获取数据。.net

用videocapture获取数据时默认状况下会以数据流的原始数据格式读入,当目前接入默认以YUYV格式编码的摄像头时,一样方式导入数据时,则帧率就会很低。对此咱们能够经过改变读取摄像头格式的方法来提升数据传输速度,虽然会损失一点图像质量,但并不很影响。code

VideoCapture cap;
VideoWriter vw;
cap.open(0);
int fourcc = vw.fourcc('M','J','P','G');//设置摄像头编码方式
cap.set(CAP_PROP_FRAME_WIDTH, FRAME_WIDTH);//设置摄像头采集图像分辨率
cap.set(CAP_PROP_FRAME_HEIGHT, FRAME_HEIGHT);
cap.set(CAP_PROP_FOURCC,fourcc);

咱们能够经过set函数设置更多参数,例如博文https://blog.csdn.net/frosuccess/article/details/79589778blog

在linux下经过设置CAP_PROP_FPS改变帧率会不成功~接口