在我的程序中,我通过OpenCV从网络摄像头或视频文件中读取并通过Qt显示它。 我从视频属性中获取fps并相应地设置计时器。
我没有问题阅读视频,fps校准很好(因为网络摄像头显示0fps,我将其设置为30) 但是当我录制图像时,我将输出视频的fps设置为与原始视频相同,但是当我在VLC或Windows Media Player中读取时,视频会加速。
最奇怪的是,当我在我的节目中播放录制的视频时,fps很好,视频也没有加速。
以下是我的表现方式:
Constructor()
{
// Initializing the video resources
cv::VideoCapture capture;
cv::VideoWriter writer;
cv::Mat frame;
int fps;
if (webcam)
{
capture.open(0);
fps = 30;
}
else
{
capture.open(inputFilePath);
fps = this->capture.get(CV_CAP_PROP_FPS);
}
// .avi
writer = cv::VideoWriter(outputFilePath, CV_FOURCC('M', 'J', 'P', 'G'), fps, frame.size());
// Defining the refresh timer;
QTimer timer = new QTimer();
connect(timer, SIGNAL(timeout()), this, SLOT(updateFeed()));
this->timer->start(1000 / fps);
}
updateFeed()
{
// ... display the image in a QLabel ... at a reasonnable speed.
writer.write(frame);
}
现在有什么我做错了吗? 感谢