使用 OpenCV 将 YUV 转换为有损压缩
Posted
技术标签:
【中文标题】使用 OpenCV 将 YUV 转换为有损压缩【英文标题】:Convert YUV to lossy compression with OpenCV 【发布时间】:2010-11-18 14:48:32 【问题描述】:如何将 YUV 颜色空间中的图像转换为 JPEG 图像?
我有一个原始图像数据保存在一个 char* 变量中:
char* frame = (char*)camera->getFrame(); // YUV colorspace image data
我需要将其转换为 JPEG 图像数据。我不想将它保存到磁盘,因为我会以流的形式发送它。
【问题讨论】:
【参考方案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"
你可以直接调用这些
【讨论】:
以上是关于使用 OpenCV 将 YUV 转换为有损压缩的主要内容,如果未能解决你的问题,请参考以下文章