簡體   English   中英

opencv從緩沖區讀取jpeg圖像

[英]opencv read jpeg image from buffer

我有一個包含jpeg圖像數據的unsigned char*緩沖區。 我想使用c ++和opencv顯示該圖像。 如果我做:

Mat img(Size(640, 480), CV_8UC3, data);
namedWindow("image", 1);
imShow("image", img);

我得到了一堆嘈雜的像素。

我想這是因為數據是jpeg(帶有標題)。 因為這有效:

Mat imgbuf(Size(640, 480), CV_8UC3, data);
Mat img = imdecode(imgbuf, CV_LOAD_IMAGE_COLOR);

但我不能使用imdecode函數,因為它來自highgui.h,它基於GTK 2,在我的項目中我使用GTK 3。

那么,我該如何顯示緩沖區數據呢? 有沒有辦法在opencv中解碼除imdecode之外的jpeg圖像,如果這是問題。 我真的不想用Qt重建opencv ...

還有其他建議嗎?

(使用Linux)

我在網上看到很多關於這個問題的回答說你應該直接調用libjpeg並繞過OpenCV的imread()例程。

這不是必要的! 您可以使用imdecode()從內存中解碼原始圖像緩沖區。 這樣做的方式並不直觀,並且沒有足夠的文檔來幫助人們第一次嘗試這樣做。

如果您有原始文件數據的指針/大小(直接來自.jpg,.png,.tif,文件等的fread()...

int    nSize = ...       // Size of buffer
uchar* pcBuffer = ...    // Raw buffer data


// Create a Size(1, nSize) Mat object of 8-bit, single-byte elements
Mat rawData( 1, nSize, CV_8UC1, (void*)pcBuffer );

Mat decodedImage  =  imdecode( rawData /*, flags */ );
if ( decodedImage.data == NULL )   
{
    // Error reading raw image data
}

而已!

希望這可以幫助將來的某個人。

我使用libjpeg使用libjpeg API文檔中描述的標准過程解壓縮JPEG圖像,該文檔位於“Decompression details”下。

解壓縮數據后,您可以使用它來構造cv::Mat 你要知道,解壓縮的圖像是RGB格式,而OpenCV的使用BGR格式,所以cvtColor()與格式化操作CV_RGB2BGR是必要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM