OpenCV保存摄像头录制视频,视频时间长度不对

兜黎 2018-01-25 01:06:40
m_capture = cv::VideoCapture(0);
if (!m_capture.isOpened())
{
MessageBoxA(NULL, "It didn't turn on the back camera", "Camera", MB_OK);
return;
}
m_capture.set(CV_CAP_PROP_FRAME_WIDTH, 320);
m_capture.set(CV_CAP_PROP_FRAME_HEIGHT, 240);
m_iWidthCapture = static_cast<int>(m_capture.get(CV_CAP_PROP_FRAME_WIDTH));
m_iHeigthCapture = static_cast<int>(m_capture.get(CV_CAP_PROP_FRAME_HEIGHT));
cv::Size videoSize(m_iWidthCapture, m_iHeigthCapture);
m_videoWriter.open(strVideoFileName, CV_FOURCC('D', 'I', 'V', 'X'), 20, videoSize);
if (!m_videoWriter.isOpened())
{
MessageBoxA(NULL, "Save Failure", "Save", MB_OK);
return;
}
m_iMarkTime = 0;

m_timRecordVideo->start(50);
connect(m_timRecordVideo, SIGNAL(timeout()), SLOT(slotRecordingVideo()));

void EEGAnalyse::slotRecordingVideo()
{
//videoCapture >> m_frame;
m_capture.read(m_frame);
m_curTime = QDateTime::currentDateTime();
m_strCurDate = m_curTime.toString("yyyy/MM/dd").toStdString();
m_strCurTime = m_curTime.toString("hh:mm:ss").toStdString();
m_strVideoMark = "Mark:" + g_strMark;
if (m_iMarkTime == 30)
{
g_strMark = "";
m_iMarkTime = 0;
}
cv::putText(m_frame, "WingThinks", cv::Point(m_iWidthCapture - 170, m_iHeigthCapture - 10),
cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(10, 128, 250), 2, 4);
cv::putText(m_frame, m_strCurDate, cv::Point(5, 30), cv::FONT_ITALIC, 1, cv::Scalar(10, 128, 250), 2, 4);
cv::putText(m_frame, m_strCurTime, cv::Point(5, 65), cv::FONT_ITALIC, 1, cv::Scalar(10, 128, 250), 2, 4);
cv::putText(m_frame, m_strVideoMark, cv::Point(5, 100), cv::FONT_ITALIC, 1, cv::Scalar(10, 128, 250), 2, 4);
m_iMarkTime++;
/*double fScale = 0.5;
cv::Size dsize = cv::Size(w * fScale, h * fScale);
cv::Mat frame = cv::Mat(dsize, CV_32S);
cv::resize(m_frame, frame, dsize);*/
m_videoWriter.write(m_frame);
int iw = m_frame.cols;
int ih = m_frame.rows;
m_image = QImage((uchar*)(m_frame.data), m_frame.cols, m_frame.rows, QImage::Format_RGB888).rgbSwapped();
m_newImg = m_image.scaled(ui.label_Video->width(), ui.label_Video->height());
ui.label_Video->setPixmap(QPixmap::fromImage(m_newImg));
m_frame.release();
}

这是我的显示和保存代码,哪位大神可以指点一下,录制时长不对的原因吗?
...全文
2207 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
兜黎 2020-09-22
  • 打赏
  • 举报
回复
引用 5 楼 weixin_43716620 的回复:
我也遇到这个问题了,请问你怎么解决的
看一下后面写的博客吧,里面有详细介绍:https://blog.csdn.net/bloke_come/article/details/79455703#comments_12335851
weixin_43716620 2020-09-22
  • 打赏
  • 举报
回复
这是C的,我已经解决了,掐着秒表手算了个fps,然后按比例缩进,虽然有误差但是勉强可以用
weixin_43716620 2020-09-22
  • 打赏
  • 举报
回复
我也遇到这个问题了,请问你怎么解决的
兜黎 2020-03-19
  • 打赏
  • 举报
回复
思路很简单,将视频获取以及保存的时间都包含在等待时间里面,然后动态调整等待时间,保证等待时间满足你设置的帧数
JaydenMao 2020-03-14
  • 打赏
  • 举报
回复
您好,我想请教一下动态调整的具体思路是怎么样的,万分感谢。
兜黎 2019-12-06
  • 打赏
  • 举报
回复
已解决,通过动态调整等待时间
jizhishen 2019-11-27
  • 打赏
  • 举报
回复
要让视频时间和实际时间一致,需要让每一帧写入的时间和实际时间一致,计算从获取map到做完所有处理的时间t,然后waitkey(1000/fps-t-1),fps是帧率,我这样子用1小时视频误差不超过1s

4,246

社区成员

发帖
与我相关
我的任务
社区描述
OpenCV相关技术交流专区
计算机视觉人工智能opencv 技术论坛(原bbs) 广东省·深圳市
社区管理员
  • OpenCV
  • 幻灰龙
  • OpenCV中国团队
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

OpenCV中国团队官方博客:https://blog.csdn.net/opencvchina

试试用AI创作助手写篇文章吧