【问题标题】:Convert YUV to lossy compression with OpenCV使用 OpenCV 将 YUV 转换为有损压缩
【发布时间】:2010-11-18 14:48:32
【问题描述】:

如何将 YUV 颜色空间中的图像转换为 JPEG 图像?

我有一个原始图像数据保存在一个 char* 变量中:

char* frame = (char*)camera->getFrame(); // YUV colorspace image data

我需要将其转换为 JPEG 图像数据。我不想将它保存到磁盘,因为我会以流的形式发送它。

【问题讨论】:

    标签: c++ image-processing opencv


    【解决方案1】:

    OpenCV 本身不导出此功能。最干净的是使用libjpeg 进行编码。查看这些问题的答案:

    【讨论】:

    • 嗯,这不好。我需要先压缩图像,然后再将它们流式传输到具有封闭嵌入式 linux 的系统上。它只有 OpenCV,我无法安装任何其他库。是否有其他方法可以在流式传输图像之前压缩图像以使其尺寸更轻?我需要保存 badwidth。使用 gzip 是个好主意吗?
    • 在我的第二个链接的接受答案中,您会发现 OpenCV 内部具有无需写入文件即可编码为 JPEG 的功能。只是在较新版本的 OpenCV 中,它们可能会更改,恕不另行通知,因为它们不是 API 的一部分。如果您被困在具有特定库设置的封闭系统上,那么您可能无论如何都不会关心它。此外,zip 算法总是有用的,但你不应该期望它减少超过 50%..
    【解决方案2】:

    检查文件 cvcolor.cpp 的 opencv src。这包含了所有的颜色转换。

    我建议你修改这行附近的现有例程:

    /* BGR/RGB -> YCrCb */

    它们几乎正是 YUV 编码所需要的。如果是 4:4:4 而不是 4:2:2 或 4:1:1

    用于 jpg 压缩

    • jpg 编码器和解码器位于 grfmt_jpeg.cpp 中,而 #include "jpeglib.h"

    • 你可以直接调用这些

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多