2011-03-26 105 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