【问题标题】:Compressing Iplimage to jpeg on memory在内存上将 Iplimage 压缩为 jpeg
【发布时间】:2011-07-23 10:05:53
【问题描述】:

我正在做一个项目,我将在网络上实时传输网络摄像头图像。但是 Iplimage 的尺寸很大,所以它不适合 udp 数据包。我必须将其压缩为 jpeg 格式。我做了一些研究,很多例子确实将图片保存在磁盘上,然后读到内存中。但我想在记忆中做到这一点。我在我的项目中使用 Qt。

有没有在内存上压缩 Iplimage 的解决方案? Qt 可能有解决方案吗?

【问题讨论】:

  • 你够幸运ImageMagick 理解你的格式吗?我没有在列表中看到“Iplimage”,但很难理解 ImageMagick 中缺少的图像类型。
  • 无论如何,压缩后的图像应该被分割成多个 UDP 数据包。我怀疑 jpeg 压缩图像只适合一个 UDP 数据包。

标签: c++ qt opencv


【解决方案1】:

或者由于您使用的是openCV iplimage),您可以使用imencode在缓冲区中转换为jpeg

【讨论】:

  • 它在 javaCV 中可用吗?
【解决方案2】:

Qt 有QImageWriter 类,它支持JPEG 格式并允许指定压缩级别。您可以使用它将 QImage 数据保存到QByteArray。下面是一个例子:

QImage image("/home/image_from.png");

QByteArray array;
QBuffer buffer(&array);

// write image to memory buffer
QImageWriter writer;
writer.setDevice(&buffer);
writer.setFormat("JPEG");
writer.setCompression(9);
writer.write(image);

或者你可以使用QPixmap保存方法;它还允许将内存缓冲区指定为输出设备:

QImage image("/home/image_from.png");
QPixmap pixmap = QPixmap::fromImage(image);

QByteArray array;
QBuffer buffer(&array);
pixmap.save(&buffer, "JPEG", 9);

希望这会有所帮助,问候

【讨论】:

    猜你喜欢
    • 2010-11-29
    • 2017-04-07
    • 2016-02-05
    • 1970-01-01
    • 2014-02-02
    • 2011-03-29
    • 2011-08-09
    • 1970-01-01
    相关资源
    最近更新 更多