我希望获得20 fps的高分辨率图像流,这是我的代码(https://gist.github.com/imrasp/7622ac73a05b567dd52b43ea3dd84879)用于相机捕捉部分。我创建了一个单独的线程来读取帧并使用videoCapture setting设置大小,如下所示
stream1 >> matFrameForward;
stream1.set(CV_CAP_PROP_FRAME_WIDTH, 1280);
stream1.set(CV_CAP_PROP_FRAME_HEIGHT, 720);
对于这个分辨率,我只有1 fps,而640x480的实验给出了25fps。我也尝试使用stream1.set(CV_CAP_PROP_FPS, 20);
,但fps不会改变。我使用Mobius相机进行以下设置:
关闭音频和时间戳稍微增加fps(从0.9到1.1)。目前,我通过计算10秒记录时间的接收帧数来检查fps。 此方法可以检查fps吗?和如何使用c ++和openCV增加fps 2.4.11
移动相机时我也遇到了运动模糊。因为我研究到目前为止这些原因来自
如何为此问题配置VideoCapture设置,除了上述原因之外,相机还没有自动对焦的模糊运动。
我的抓斗功能
void cameraLoop(){
while (!time_to_exit) {
timestampcamera_ns = boost::lexical_cast<uint64_t>(std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::system_clock::now().time_since_epoch()).count());
pthread_mutex_lock(&_mutexFrameCam1Last);
stream1 >> matFrameForward;
stream1.set(CV_CAP_PROP_FRAME_WIDTH, 1280);
stream1.set(CV_CAP_PROP_FRAME_HEIGHT, 720);
// stream1.set(CV_CAP_PROP_BUFFERSIZE, 3);
// stream1.set(CV_CAP_PROP_FPS, 20);
pthread_mutex_unlock(&_mutexFrameCam1Last);
std::cout << "read matFrameForward size : " << matFrameForward.size() << std::endl;
cv::imshow("Camera", matFrameForward);
if (cv::waitKey(30) >= 0)
break;
}
}
摄像机被声明为全局变量并在initializeParams()
void initializeParams(){
stream1 = cv::VideoCapture(1);
... // other parameters
}
我在main函数中使用boost thread declare创建了相机线程。
std::cout << "Start camera thread..." << std::endl;
boost::thread threadCamera = boost::thread(&cameraLoop);