c++ - 用于格式转换/简单转换的 FFMpeg 与 OpenCV
问题描述
我必须创建一个可以实时处理图像的系统。我已经用 C++ 实现了一个像素格式转换系统,它也可以进行一些简单的转换(目前:旋转和镜像)。
系统的输入/输出格式为以下格式的帧:
- RGB (24, 32)
- YUYV420, YUYV 422
- JPEG
- 原始灰度
例如,一项操作可以是:
- YUYV422 -> 旋转 90 -> 翻转水平 -> RGB24
- 灰度 -> 旋转 270 -> 翻转垂直 -> YUYV420
该系统的目标是为旋转/镜像和像素格式转换提供最佳性能。我当前的实现依赖于 OpenCV,但是在处理超过 2k 分辨率的数据时会遇到性能问题。
当前的实现使用 cv::Mat 和 cv::transpose/cv::flip/cv::cvtColor,我优化了系统以移除过渡缓冲区并尽可能多地复制。
不太乐意重新发明轮子,我知道使用 swscale 和 FFMpeg 的一些过滤器,可以达到相同的结果。我的问题是:
FFMpeg 系统相当通用,您认为我可能会因使用此解决方案而受到占用空间/性能警告的困扰吗?
格式转换在 OpenCV 中似乎有些优化,但我不知道 FFMpeg 的实现......(注意:我在带有 SSE 的 x86_64 英特尔平台上)
你知道有什么库可以实时处理这种简单的转换吗?
谢谢
解决方案
OpenCV 实现针对您的配置进行了优化。不要期待 ffmpeg 的改进。最近,OpenCV 切换到具有 SSE 优化的 libjpeg-turbo ,这可能会改善 JPEG 转换。
推荐阅读
- mailchimp - Mailchimp api 不发送再见电子邮件 - 带有 https://github.com/drewm/mailchimp-api
- javascript - 在我的数组的每个对象中添加一个顶级列表
- python - 方法名不符合snake_case 命名风格
- javascript - 按下 keyup 和 keydown 时的图像变化
- javascript - Django - 为 Angular 应用程序提供服务
- mysql - 使用 Node.js 连接到 Google Cloud 上的 MySQL 数据库(错误:连接 ENOENT)
- pagination - 在没有查看器的情况下中继现代分页
- reporting-services - Reporting Services:为尚未识别的用户添加权限
- apache - 启动 Apache 后 Docker 容器关闭
- python - 为什么我会收到列表索引错误?