参考: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读取摄像头