将Iplimage压缩到内存上的jpeg

时间:2011-03-26 09:17:56

标签: c++ qt opencv

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

在内存中压缩Iplimage有什么解决方案吗? 可能Qt有解决方案吗?

2 个答案:

答案 0 :(得分: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);

希望这有帮助,尊重

答案 1 :(得分:0)

或者因为你正在使用openCV iplimage)你可以使用imencode转换为缓冲区中的jpeg