2010-11-18 326 views
0

如何將YUV色彩空間中的圖像轉換爲JPEG圖像?使用OpenCV將YUV轉換爲有損壓縮

我保存在一個char *變量的原始圖像數據:

char* frame = (char*)camera->getFrame(); // YUV colorspace image data 

我需要將其轉換爲JPEG圖像數據來代替。我不想將它保存到磁盤,因爲我將以流的形式發送它。

回答

1

OpenCV本身不導出此功能。 Cleanest將使用libjpeg進行編碼。看到這些問題的答案:

+0

好吧,那是不好的。我需要壓縮圖像,然後在封閉的嵌入式Linux系統上進行流式傳輸。它只有OpenCV,我不能安裝任何額外的庫。有沒有其他方法可以在流式傳輸之前壓縮圖像,使其尺寸更輕?我需要保存badwidth。使用gzip是一個好主意嗎? – 2010-11-18 20:13:22

+0

在第二個鏈接的接受答案中,您會發現OpenCV內部具有編碼爲JPEG的功能,而無需寫入文件。只是在更新版本的OpenCV中,它們可能會在沒有進一步通知的情況下進行更改,因爲它們不屬於API的一部分。如果你被困在一個封閉的系統上,並且有特定的庫設置,你可能不會在意這一點。此外,壓縮算法將始終有幫助,但您不應該期望減少超過50%。 – ypnos 2010-11-18 22:35:21

1

檢查OpenCV的SRC的文件cvcolor.cpp。這有所有的顏色轉換。

我建議你修改接近這個線現有的套路:

/* BGR/RGB - > YCrCb的*/

他們幾乎正是你需要的YUV編碼。如果它的4:4:4,而不是4:2:2或4:1:1

爲JPG壓縮

  • 的JPG編碼器和解碼器是在grfmt_jpeg.cpp這恰好#包括「 jpeglib.h」

  • 您可以調用這些直接