linux - 电视 (TV) 视频实时像素级分析的建议

标签 linux video opencv ffmpeg signal-processing

[注意:这是对 earlier question 的重写这被认为是不合适的和封闭的。]

我需要对电视 (TV) 视频进行一些像素级分析。这种分析的确切性质并不相关,但它基本上涉及查看电视视频每一帧的每个像素,从 MPEG-2 传输流开始。主机平台将是服务器级、多处理器 64 位 Linux 机器。

我需要一个可以处理传输流解码并实时向我显示图像数据的库。 OpenCV 和 ffmpeg 是我正在考虑用于这项工作的两个库。 OpenCV 很有吸引力,因为我听说它具有易于使用的 API 和丰富的图像分析支持,但我没有使用它的经验。以前用过ffmpeg从文件中提取视频帧数据进行分析,但它缺乏图像分析支持(虽然Intel的IPP可以补充)。

除了解决此问题的一般建议(不包括实际图像分析),我还有一些更具体的问题可以帮助我开始:

  1. 业界是否普遍使用 ffmpeg 或 OpenCV 作为实时计算的基础? 视频分析,还是我应该看的其他东西?
  2. OpenCV可以实时解码视频帧,还留足够 剩余 CPU 用于执行重要的图像分析,也是实时的?
  3. 足以使用 ffpmeg 进行 MPEG-2 传输流解码,或者 直接使用 MPEG-2 解码库是否更可取(如果是,是哪个)?
  4. ffmpeg 的输出帧是否有特定的像素格式? 或者 OpenCV 在生成(如 RGB、YUV 或 YUV422 等)方面特别有效?

最佳答案

1.
我肯定会推荐 OpenCV 进行“实时”图像分析。我假设实时是指跟上电视帧速率的能力(例如,NTSC(29.97 fps)或 PAL(25 fps))。当然,如评论中所述,这当然取决于您可用的硬件以及图像大小 SD (480p) 与 HD(720p 或 1080p)。 FFmpeg 当然有它的怪癖,但你很难找到更好的免费替代品。它的力量和灵 active 令人印象深刻;我敢肯定,这是 OpenCV 开发人员决定将其用作 OpenCV 视频解码/编码后端的原因之一。

2.
在使用 OpenCV 进行解码时,我没有看到高延迟问题。您的系统可以有多少延迟?如果您需要提高性能,请考虑使用单独的线程进行捕获/解码和图像分析。由于您提到了拥有多处理器系统,这应该可以更好地利用您的处理能力。我肯定会推荐使用最新的 Intel Core-i7(或可能是 Xeon 等效)架构,因为这将为您提供当今可用的最佳性能。

我已经在几个嵌入式系统上使用过 OpenCV,所以我非常了解您对最佳性能的渴望。我多次发现没有必要处理全帧图像(尤其是在尝试确定 mask 时)。如果您在处理获取的视频流时遇到困难,我强烈建议对图像进行下采样。这有时可以立即为您提供 4-8 倍的加速(取决于您的下采样因子)。同样在性能方面,我肯定会推荐使用英特尔的 IPP .由于 OpenCV 最初是一个 Intel 项目,IPP 和 OpenCV 很好地融合在一起。

最后,由于图像处理是那些“令人尴尬的并行”问题领域之一,请不要忘记在需要时使用 GPU 作为解决问题的硬件加速器的可能性。 OpenCV 最近在这个领域做了很多工作,因此如果需要,您应该可以使用这些工具。

3.
我认为 FFmpeg 是一个很好的起点;我能想到的大多数替代方案(Handbrake、mencoder 等)都倾向于使用 ffmpeg 作为后端,但看起来您可能可以使用 IPP 的 Video Coding 来实现自己的目标。图书馆,如果你愿意的话。

4.
OpenCV 的颜色内部表示是 BGR,除非你使用类似 cvtColor 的东西转换它。如果您想查看 FFmpeg 支持的像素格式列表,您可以运行

ffmpeg -pix_fmts 

看看它能输入和输出什么。

关于linux - 电视 (TV) 视频实时像素级分析的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8393207/

相关文章:

OpenCV交通标志识别

c++ - 正弦模式生成的 OpenCV C++ 错误 - structured_light 库

php - 如何从pdf中提取文本层和背景层?

linux - 是否可以在没有 root 的情况下在 CentOS 上安装 g++?

javascript - 设置 currentTime 后,html5 视频等待 readystate == 4

macos - OpenCV VideoWriter write() 函数在 C++ 中的 MAC 操作系统上失败

python - 使用 conda 安装 opencv

linux - 如何在 Perl 中将文件拆分为给定数量的部分? (在 Unix 上)

我们可以将权限从用户更改为 root 吗?

facebook - 在 Facebook 嵌入式视频中设置自动播放时如何启用声音?