opencv 打开1080P等高分辨率摄像头时卡顿问题的解决

参考:html

://blog.csdn.net/lunweiwangxi3/article/details/88556911ios

http://blog.sina.com.cn/s/blog_9b493e7b0102xvn6.htmlgit

 

总结http://stackoverflow.com/questions/16092802/capturing-1080p-at-30fps-from-logitech-c920-with-opencv-2-4-3得出经验以下:ide

opencv能够捕获摄像头数据。若是要读高分辨率和高帧率,能够用以下的设置:spa

capture.set(CV_CAP_PROP_FPS, 30);.net

capture.set(CV_CAP_PROP_FRAME_WIDTH, 1920);视频

capture.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);htm

若是只按照常规的读取方法帧率其实达不到30fps,因此必须对读到的视频帧进行压缩,故还须要设置:blog

capture.set(CV_CAP_PROP_FOURCC, CV_FOURCC('M', 'J', 'P', 'G'));get

这样将视频帧压缩以后,就能够让摄像头在1080p及30fps下工做。

注意:

设置参数的顺序必定是格式、帧率、宽/高,不然不能正常工做。

代码以下:​

#include "iostream"

using namespace std;

#include "opencv2\opencv.hpp"

using namespace cv;

int main()

{

VideoCapture capture(0);

if (!capture.isOpened())

{

cout << "未发现摄像头!" << endl;

return -1;

}//检测是否成功打开摄像头

Mat frame;

capture.set(CV_CAP_PROP_FOURCC, CV_FOURCC('M', 'J', 'P', 'G'));

capture.set(CV_CAP_PROP_FPS, 30);

capture.set(CV_CAP_PROP_FRAME_WIDTH, 1920);

capture.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);

while (1)

{

capture >> frame;

if (!capture.read(frame))//这个判断的必须的

break;

//中间可插入各类对图像的处理

imshow("frame", frame);

if (waitKey(30) >= 0)//刷新间隔30ms,按任意键退出

break;

}

return 0;

}//opencv2读取摄像头