【发布时间】:2017-04-24 02:12:47
【问题描述】:
我正在使用支持 1280 x 720 @ 60 fps 的网络摄像头。
我的电脑环境是intel i5-4690K和Windows7,Visual Studio 2015,opencv 3.1
当我在 Kinovea(0.85.15, https://www.kinovea.org/) 中运行网络摄像头时,摄像头以 1280 x 720 @ 60fps 运行。
但是,在带有 Opencv 的 Visual Studio 中,它在 60 fps 时不起作用。
它只能工作 12~15 fps。
我检查相机 fps 的代码如下。
#include <stack>
#include <iostream>
#include <math.h>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/videoio.hpp"
#include <opencv2/video.hpp>
#include "opencv2/imgcodecs.hpp"
#include <time.h>
using namespace cv;
using namespace std;
int keyboard;
int main(int argc, char** argv)
{
VideoCapture cap(0); //capture the video from web cam
if (!cap.isOpened()) // if not success, exit program
{
cout << "Cannot open the web cam" << endl;
return -1;
}
cap.set(CV_CAP_PROP_FRAME_WIDTH, 1280);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 720);
while ((char)keyboard != 'q' && (char)keyboard != 27)
{
Mat imgOriginal;
Mat ROOI;
clock_t a = clock();
bool bSuccess = cap.read(imgOriginal);
if (!bSuccess)
{
cout << "Cannot read a frame from video stream" << endl;
break;
}
printf("Captue Time : %f\n", double(clock() - a) / double(CLOCKS_PER_SEC));
imshow("Original", imgOriginal);
if (waitKey(1) == 27)
{
cout << "esc key is pressed by user" << endl;
break;
}
}
return 0;
}
在上面的代码中。我检查了“Capture Time”,通常记录0.07s~0.09s。
所以,我尝试 VideoCapture::set(CV_CAP_PROP_FPS, 60),但它不起作用。 (当我使用代码 VideoCapture::get(CV_CAP_PROP_FPS) 获取 FPS 时,它返回值 0。)
如何控制网络摄像头 FPS?
谢谢。
【问题讨论】:
-
你看过这个帖子吗? (stackoverflow.com/questions/19662193/…) - 网络摄像头通常具有固定的帧速率,无法更改。
-
@Dai 谢谢你的回复。但是,如果网络摄像头具有固定的帧速率,我无法理解它如何在 Kinovea 程序中以 60 fps 运行。 Kinovaa 和 opencv 有什么不同?谢谢。
-
很大程度上取决于相机是否支持各种输入电平。我可以举一个例子,OpenCV+OpenNI 如何允许设置 VideoeCapture(与 Kinect 一起使用):
modeRes = m_capture.set(CAP_OPENNI_IMAGE_GENERATOR_OUTPUT_MODE, X);,在这种情况下,X是其中之一:{CAP_OPENNI_VGA_30HZ, CAP_OPENNI_SXGA_15HZ, CAP_OPENNI_SXGA_30HZ}。我想 OpenNI 会在分辨率设置中对其进行编码。 -
@hauron 感谢您的回复。我认为你的意见是尝试。我会试试的。谢谢!
标签: c++ opencv frame-rate