栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

学习笔记:C++环境下cv::VideoCapture的.read(frame)的读取与存储方式

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学习笔记:C++环境下cv::VideoCapture的.read(frame)的读取与存储方式

//在Qt环境下手动选择文件目录(默认视频在D盘下,并要求视频格式为.avi或.mp4格式)
QString my_filename = QFileDialog::getOpenFileName(this,"打开视频","D:\","(*.avi *.mp4)");

//Qt环境下,需要将读入的QString类型转换为String类型以读取视频
cv::VideoCapture my_video(m_filename.toStdString());


Mat frame;
my_video.read(frame);

C++语言中默认的read为“逐帧读取”,并将读取到的帧存放到frame中去。因此通常会用.get()函数得到总帧数与帧频,然后while循环直至视频结束

通俗来讲就是读一帧少一帧。

一下是一段实例,具体功能为读取视频并显示视频(在视频结束之前无法进行关闭,如需关闭则需要额外设置变量和控件并将其嵌套至while循环中以暂停循环)

其中m_video.get(宏名)函数的用法参考我的另一篇博客

学习笔记:C++环境下cv::VideoCapture.get()的宏使用_The King of LA的博客-CSDN博客

QString m_filename = QFileDialog::getOpenFileName(this,"打开视频","D:\2_projects\video_and_photo","(*.avi *.mp4)");
 
cv::VideoCapture m_video(m_filename.toStdString());//视频路径只能为String类型
 
 
 
int m_count = m_video.get(CV_CAP_PROP_FRAME_COUNT);//得到总帧数,用来计数以停止视频
int m_fps = m_video.get(CV_CAP_PROP_FPS);//得到帧率以控制视频速度
//m_video.get();//函数的两种使用方式
 
Mat frame,m_frame;
QImage fra;
 
while (--m_count)//m_count未减到0时持续循环,也即一直播放视频
{
            
      m_video.read(frame);
 
      cvtColor(frame,m_frame,CV_BGR2RGB);//将image由Mat格式转为QImage格式的必备操作(两者在内存中三通道的存储顺序不同)
      fra = QImage((const uchar*)(m_frame.data),m_frame.cols,m_frame.rows,m_frame.cols*m_frame.channels(),QImage::Format_RGB888);//强制类型转换将Mat转为QImage
 
      imshow("video", frame);
      waitKey(1000 / m_fps);//1000ms/帧率=每帧停留时间
}

以上就是本次学习的全部记录,如有疑问可以私信笔者一起讨论。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1012955.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号