OpenCV 和 4K 视频

Posted

技术标签:

【中文标题】OpenCV 和 4K 视频【英文标题】:OpenCV and 4K Videos 【发布时间】:2016-01-09 13:54:46 【问题描述】:

我正在尝试使用 OpenCV 读取和显示 4K 视频文件。同样的程序,附录 A 中显示的一个非常简单的程序,在显示 1080 视频时运行良好,但在升级到 4K 视频时有明显的延迟。

显然现在在任何操作中都有 16 倍以上的像素。

现在我通常在没有很好规格、内置显卡、4Gb RAM 和 i3 CPU 以及 HDD(不是 SSD)的 PC 上运行。我已经在具有 8GB RAM、i5 和 SSD 的 PC 上对此进行了测试,虽然使用了 3.XGb 的 RAM,但它似乎主要是一个 CPU 密集型程序,即使在更好的 PC 上,我的所有内核也能达到 100%。

我的问题是:(使这篇文章具体化)

    使用 GPU 操作会有所帮助吗? 这个问题可以通过升级到具有更好 CPU 的 PC 来解决吗?实际上,这个应用程序只能在 i7 上运行,因为我不认为我们会购买服务器 CPU... 是绘图到屏幕操作还是简单地从磁盘读取导致速度变慢?

如果有人过去有任何使用 4K 和 OpenCV 的经验,这也是有用的信息。

附录 A

int main()

    VideoCapture cap(m_selected_video);
    if (!cap.isOpened())  // check if we succeeded
    
        std:cout << "Video ERROR";
    

    while (_continue)
    
        Mat window1;
        cap >> window1; // get a new frame from camera
        imshow("Window1", window1);
        if (waitKey(30) >= 0) break;
    

【问题讨论】:

您确实意识到每次迭代都在等待 30 毫秒,如果您要显示一个小图像,这可能工作得很好,但当它需要每帧显示 16 倍的像素时就不那么好了? 我没有意识到我在等待 30 毫秒。但是,将其降低到 1 毫秒,我认为这是您可以等待的最低值,并没有任何(显着)差异。 你能用VLC或ffplay流畅播放视频吗? @Cornstalks 有趣的是,它似乎只在 Windows 媒体播放器中播放一致且流畅。如果我在任何一台 PC 上的 VLC 中播放它,它只会给我前几秒钟,然后视频部分会变绿并且很奇怪。音频一直在播放... 什么是视频编解码器? Windows Media Player 可能有一些 VLC/libav 没有的 GPU 加速。 【参考方案1】:

这个问题的答案很有趣,但我认为归结为视频的编解码器或编码。

我使用的第一个视频是this one(虽然这可能不是我使用的确切下载),它似乎在 VLC 或 OpenCV 中播放效果不佳,但在 Windows 媒体播放器中播放效果很好。我认为这是因为它是用 MPEG AAC 音频编码的。

然后我下载了an elysium 4k trailer,它是 h264 编码的,似乎在 VLC 和 OpenCV 中都可以正常工作。所以 Hooray 4K 在 OpenCV 中总体上不是问题!

所以我认为这可能是文件大小。我付费并下载了一个 7Gb 6 分钟的 4K 视频。这在 OpenCV 和 VLC 中运行良好,即使在屏幕上绘制三次也没有延迟。这是一个 .mov 文件,我目前无法访问编解码器(当我这样做时会更新此位)。

所以 TL:DR: 导致问题的不是文件大小或容器类型,而是某些编解码器似乎确实存在问题。这只是一个小的探索,可能会有不同的问题。

附录:感谢 cmets 中的cornstalks 的帮助,他们指出 WMP 可能已内置 GPU 支持并在 VLC 中进行任何测试,这非常有帮助

【讨论】:

仅供参考,MPEG AAC Audio 是音频编解码器,而不是视频编解码器。您链接到的那个烟花视频使用 h.264(他们说视频编解码器是 AVC,这只是 h.264 的另一种说法)。如果您转到Tools -&gt; Media Information -&gt; Codec Details,VLC 可以告诉您编解码器信息。或者你可以使用mediainfo。 我就是从那里得到它的......嗯,我会检查一下。我会尝试至少确保我们上面的信息是最新的,以便将来进行任何搜索

以上是关于OpenCV 和 4K 视频的主要内容,如果未能解决你的问题,请参考以下文章

机器视觉行业实践技巧 -- OpenCV技巧与方法:代码脚手架 -- 图像处理

机器视觉行业实践技巧 -- OpenCV技巧与方法:代码脚手架 -- 图像处理

opencv 设置摄像头采集图像编码格式

opencv4opencv视频教程 C++(opencv教程)1opencv介绍和环境搭建

OpenCV入门(C++/Python)- 使用OpenCV读取和编写视频

使用 OpenCV 捕获和保存视频