gpt4 book ai didi

c++ - 视频录制速度太快

转载 作者:行者123 更新时间:2023-11-28 03:13:53 25 4
gpt4 key购买 nike

请看下面的代码:

#include <iostream>
#include <opencv2/core/core.hpp>
#include <string>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/video/background_segm.hpp>

using namespace std;
using namespace cv;

double getMSE(const Mat& I1, const Mat& I2);

int main()
{
Mat current;
VideoCapture cam1;
VideoWriter *writer = new VideoWriter();



cam1.open(0);

namedWindow("Normal");

if(!cam1.isOpened())
{
cout << "Cam not found" << endl;
return -1;
}

cam1>>current;
Size *s = new Size((int)current.cols,current.rows);
writer->open("D:/OpenCV Final Year/OpenCV Video/MyVideo.avi",CV_FOURCC('D','I','V','X'),10,*s,true);


while(true)
{
//Take the input
cam1 >> current;

*writer << current;
imshow("Normal",current);

if(waitKey(30)>=0)
{
break;
}


}
}

此代码运行良好,没有问题。但是,当我运行录制的视频时,它非常快!就像它被快速转发一样。我真的不明白为什么。

最佳答案

检查您从相机抓取帧的速率,并确保该速率与您将帧记录到输出文件中的速率相匹配。

写入文件的帧速率指定为 this functionfps 参数:

bool VideoWriter::open(const string& filename, int fourcc, 
double fps, Size frameSize, bool isColor=true);

至于相机 fps,对于某些相机,您可以确定其帧速率 as follows

double fps = cam1.get(CV_CAP_PROP_FPS); 

或者如果相机不支持这种方法,您可以通过测量连续帧之间的平均延迟来找到它的帧率。

更新:如果您的相机不支持cam1.get(CV_CAP_PROP_FPS);,可以通过实验估算帧速率。例如:

while(true) {
int64 start = cv::getTickCount();

//Grab a frame
cam1 >> current;

if(waitKey(3)>=0) {
break;
}

double fps = cv::getTickFrequency() / (cv::getTickCount() - start);
std::cout << "FPS : " << fps << std::endl;
}

此外,确保输出视频文件已打开以供写入

if ( !writer->isOpened())
{
cout << "Could not open the output video for write: " << endl;
return -1;
}

关于c++ - 视频录制速度太快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17575455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com