我正在使用OpenCV为以30 FPS运行的全高清摄像机录制视频。我知道相机的FPS,因为我通过计算有效帧的数量来测量它(这也与规格一致)。我通过使用5毫秒的秒计时器来完成此操作。这是我每5毫秒运行一次的代码。
cv::Mat frame;
if (capture.read(frame)){
showCurrentFrame(frame);
fpsCounter.newFrame();
ui->labelVideo->setText("Video (" + QString::number(frame.cols) + "x" + QString::number(frame.rows) + ")");
ui->labFPS->setText("FPS: " + QString::number(fpsCounter.getFPS()));
if (isRecording){
recorder << frame;
fpsRecordCounter++;
}
}
当我按下“开始录制按钮”
时,我将录制视频的FPS设置为30 recorder.open(currentVideoFile.toStdString(),
VIDEO_CODEC_FOURCC, // Tells it to record MJPEG
VIDEO_REC_FPS, // Define with 30
frameSize)){ // 1920x1080
我在我的工作站中开发了我的程序,它使用Qt和OpenCV 2.4.5运行Centos 7。当我在桌面PC上录制时,FPS显示始终为30左右。
但是,这需要从行驶中的汽车进行记录。因此,我将代码复制粘贴到我的笔记本电脑中,并将其编译为零问题。
我的笔记本电脑使用Debian Testing和OpenCV 2.4.9。在这里观察到减速。
由于我正在使用Qt,我需要处理cv :: Mat才能显示它。我在showCurrentFrame函数中执行此操作。
如果我在录制时停用此功能,我可能会获得23 FPS(并且无法看到我正在录制的内容) 如果我把它保留在上面的代码中,我得到大约16~17 FPS。
我认为我的第一件事是我的电脑不够强大,但不应该。这是模型:
https://www.asus.com/Notebooks/ASUS_VivoBook_S550CA/specifications/
这是具有500 Gb HDD的I5变体。
所以我很茫然。这是OpenCV上的某种bug,它是在较新的openCV版本中引入的,还是仅仅是因为我的笔记本电脑不够强大?