FFMpeg与OpenCV的格式转换/简单转换

时间:2019-02-01 13:00:22

标签: c++ performance opencv ffmpeg vision

我必须创建一个可以实时处理图像的系统。我已经在C ++中实现了像素格式转换系统,该系统还可以进行一些简单的转换(当前:旋转和镜像)。

系统的输入/输出格式为以下格式的帧:

  • RGB(24,32)
  • YUYV420,YUYV 422
  • JPEG
  • 原始灰度

例如,一个操作可以是:

  • YUYV422->旋转90->翻转Horiz-> RGB24
  • 灰度->旋转270->垂直翻转-> YUYV420

该系统的目标是为旋转/镜像和像素格式转换提供最佳性能。我目前的实现依赖于OpenCV,但是在处理2k分辨率以上的数据时会遇到性能问题。

当前实现使用cv :: Mat和cv :: transpose / cv :: flip / cv :: cvtColor,并且我优化了系统以删除过渡缓冲区并尽可能多地复制。

不是很高兴重新发明轮子,我知道使用swscale和FFMpeg的一些过滤器可以实现相同的结果。我的问题是:

  1. FFMpeg系统相当通用,您认为使用该解决方案可能会占用体积/性能方面的警告吗?

  2. 在OpenCV中似乎已经实现了格式转换,但我对FFMpeg的实现一无所知...(注意:我在具有SSE的x86_64 intel平台上)

  3. 您知道有什么库可以实时处理这种简单的转换吗?

谢谢

1 个答案:

答案 0 :(得分:1)

OpenCV的实现是您的配置最优化。不要指望ffmpeg会有所改善。最近,OpenCV使用SSE优化切换到libjpeg-turbo ,这可能会改善JPEG转换。