资源简介

OpenCV视频的保存以及显示,中间对waitKey延时等待有一个小小的均衡策略

资源截图

代码片段和文件信息

//打开摄像头
cv::VideoCapture videoCapture = cv::VideoCapture(0);
if (!videoCapture.isOpened())
{
    MessageBoxA(NULL “It didn‘t turn on the back camera“ “Camera“ MB_OK);
    return;
}

// 设置摄像头分辨率和每秒帧数
videoCapture.set(CV_CAP_PROP_frame_WIDTH 320);
videoCapture.set(CV_CAP_PROP_frame_HEIGHT 240);
videoCapture.set(CV_CAP_PROP_FPS 25);
QDateTime curTime;
std::string strCurDate strCurTime;

// 创建显示窗口
cv::namedWindow(“Video“);

// 创建保存文件夹以及保存文件(后缀为.avi)
QString qtrSaveViodePath = QDir::currentPath() + “/Video“;
QDir dir(qtrSaveViodePath);
if (!dir.exists())
bool ok = dir.mkdir(qtrSaveViodePath);
std::string strFileName = qtrSaveViodePath.toStdString() + “/“ + g_qstrName.toStdString() + “.avi“;

// 初始化写入文件
cv::VideoWriter videoWriter;
int w = static_cast(videoCapture.get(CV_CAP_PROP_frame_WIDTH));
int h = static_cast(videoCapture.get(CV_CAP_PROP_frame_HEIGHT));
cv::Size videoSize(w h);
//获得帧率  
double dfs = videoCapture.get(CV_CAP_PROP_FPS);
int delay = 1000.0 / dfs;
videoWriter.open(strFileName CV_FOURCC(‘D‘ ‘I‘ ‘V‘ ‘X‘) dfs videoSize);
if (!videoWriter.isOpened())
{
    MessageBoxA(NULL “Save Failure“ “Save“ MB_OK);
    return;
}

// 准备获取帧、显示以及保存
// starttim endtim用来统计获取、显示和保存用时时长,以便cv::waitKey刷新视频和保证视频大小正常
DWORD starttim endtim;
bool b_First = false;
int iWaitKeyTime = 0 itime = 0;
while (g_bCont

评论

共有 条评论