喵星软件园提供热门手机游戏下载,最新手机游戏攻略!

《Propnight》解锁帧率方法介绍,propnight解锁帧数

时间:2023-10-03 22:39:56 来源: 浏览:

深度解读 OpenCV中的VideoCapture视频读取

引言

深度解析OpenCV中VideoCapture对象背后的视频编码与解码的第三方库支持与速度之谜。

支持的第三编解码库与类型

我们都知道OpenCV中的VideoCapture视频读取是借助其它的第三方库来完成编码与解码的过程,当前支持的视频解码主要有:

mkv / mpeg2mkv / h264mkv / h265     mkv / vp8        mp4 / mpeg2 mp4 / h264mp4 / h265avi / mpeg2avi / h264       avi / vp8

视频编码主要有:

mkv / mpeg2mkv / h264mkv / vp8mp4 / h264     avi / mpeg2avi / h264avi / vp8

我们最常见的OpenCV中读取视频文件的函数VideoCapture参数解释如下:

cv::VideoCapture::VideoCapture(         const String &        filename,         int apiPreference = CAP_ANY)

其中参数filename表示文件名称,大家经常忽略第二个参数默认值为CAP_ANY,意思是系统自动检测选择。当读取摄像头或者IP视频流的时候:

cv::VideoCapture::VideoCapture(         int  index,         int apiPreference = CAP_ANY)

其中index表示相机的ID标识。

当读取视频文件时候第二个参数的可以设置为:

cv::CAP_FFMPEGcv::CAP_INTEL_MFX

当读取摄像头或者视频流时候,第二个参数可以设置为

cv::CAP_DSHOW // windows只支持cv::CAP_MSMFcv::CAP_V4L

如何查询当前OpenCV版本支持哪些视频编码与解码的第三方后端库,可以通过下面的代码完成:

std::vector<cv::VideoCaptureAPIs> vcs = cv::videoio_registry::getBackends();for (auto item : vcs) {    std::cout << "name:" << cv::videoio_registry::getBackendName(item) << std::endl;}

运行结果如下:

我的版本是OpenVINO2021.02+OpenCV4.5.1的联合编译版本。所以支持GSTREAMER与INTEL_MFX两个后端库。视频文件解码采用FFMPEG与英特尔MFX库时的对比演示代码如下:

// cv::VideoCapture cap("D:/test.h264", cv::CAP_INTEL_MFX);// cv::VideoCapture cap("D:/test.h264", cv::CAP_FFMPEG);// cv::VideoCapture cap("D:/images/video/play_football.mp4", cv::CAP_FFMPEG);cv::VideoCapture cap(0, cv::CAP_DSHOW);cv::Mat frame;cv::TickMeter tick;int fps = cap.get(cv::CAP_PROP_FPS);int h = cap.get(cv::CAP_PROP_FRAME_HEIGHT);int w = cap.get(cv::CAP_PROP_FRAME_WIDTH);std::cout << "fps:" << fps << " heigh:" << h << " width:" << w << std::endl;// cv::VideoWriter writer("D:/test.h264", cv::VideoWriter::fourcc('H', '2', '6', '4'), fps, cv::Size(w, h), true);while (true){    tick.start();    bool ret = cap.read(frame);    tick.stop();    if (!ret) {        break;    }    double res_fps = tick.getCounter() / tick.getTimeSec();    std::cout << tick.getCounter() << " frames in " << tick.getTimeSec() << " sec ~ " << res_fps << " FPS" << " (total time: " << tick.getTimeSec() << " sec)" << std::endl;    cv::imshow("input", frame);    char c = cv::waitKey(1);    // writer.write(frame);    if (c == 27) {        break;    }}// writer.release();cap.release();return 0;

加速解码

默认下载的OpenCV在Widnows下面只支持CAP_DSHOW这种方式实时视频流解码读取,这种方式我测试下来实时性能没有直接读取视频文件方式高效。单纯的读取我的电脑自带摄像头(酷睿i7 CPU第八代)速度大致只有35FPS左右,而我读取视频文件通过FFMPEG支持,可以轻松达到每秒220FPS左右。而且OpenCV中的FFMPEG是不支持硬件加速的版本,响应更好的响应视频流水线操作就绝对不能这么读取,有什么好的办法?结合OpenCV有个技术线路可以提高视频流的解码速度,提升流水线作业效率。

方法:使用GSTREAMER支持方式

相比FFMPEG第三方库,GSTREAMER支持多种后端,通过软件支持硬件加速的方式解码视频与流水线解码视频操作,同时还支持异步操作,这一波操作之后,解码速度会比最原始的OpenCV自动检测得到的方法要快N多,官方实验给出的数据如下:

实事证明的确可以加速很多!该方法只在ubuntu系统下验证过,widnows系统下还没有验证过,官方说 in theory, can run~~~~作为技术人员看到这句话你懂的,就是坑很多,你自己看着办

此外就是彻底放弃Windows的DSHOW,有钱买个加速卡,直接硬件解码加速,这样就无忧了。

为了让大家更好得理解与使用OpenVINO框架,我特别整理了OpenVINO计算机视觉加速的学习路径,图示如下:

标题:《Propnight》解锁帧率方法介绍,propnight解锁帧数
链接:https://www.miaoshengapp.cn/yxgl/78403.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
DNF15周年答题题库介绍 15周年答题答案大全
DNF15周年答题题库介绍 15周年答题答案大全

DNF15周年答题活动难倒了很多玩家,主要是这

2023-07-09
《英雄联盟手游》塞恩中单上分攻略
《英雄联盟手游》塞恩中单上分攻略

英雄联盟手游塞恩中单上分攻略,想必还有很多

2022-12-23
不良人3不良何在任务攻略
不良人3不良何在任务攻略

在不良人3游戏中会有很多轶事任务,不良何在

2022-12-23
Melatonin好玩吗 Melatonin玩法简介
Melatonin好玩吗 Melatonin玩法简介

期待已久的手游Melatonin即将登陆,这款手机

2023-07-20
《原神》旧语新知隐匿的佣兵全流程攻略
《原神》旧语新知隐匿的佣兵全流程攻略

原神在近期正式更新到了3.1版本,很多玩家都

2022-12-23
《原神》3.1阿贝多突破材料采集位置介绍
《原神》3.1阿贝多突破材料采集位置介绍

《原神》玩的人多吗?《原神》游戏最近非常火

2022-12-24