2011-03-26 130 views
0

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

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

+0

是否到jpeg你足够幸运,[ImageMagick](http://www.imagemagick.org/script/formats.php)了解你的格式?我没有在列表中看到“Iplimage”,但很难从ImageMagick中找出丢失的图像类型。 – sarnold 2011-03-26 09:33:49

+0

无论如何,压缩映像应该被分割成几个UDP数据包。我怀疑jpeg压缩映像只适合一个UDP数据包。 – 2011-03-26 19:40:41

回答

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); 

希望这会有所帮助,至于

0

或者因为你正在使用的OpenCV的IplImage),你可以只使用imencode转换的缓冲

+0

它在javaCV中可用吗? – 2013-09-14 12:45:14