2013-07-03 107 views
0

什麼是OpenCV使用的默認(像素)存儲格式?OpenCV默認存儲格式

我知道這是BGR,但它是BGR32嗎? BGR16? 它是包裝還是平面?

你能告訴我一種找到它的方法嗎?

謝謝你的幫助。

上下文:其實我試圖使用OpenCV與另一個名爲MIL(Matrox Imaging Library)的庫。我需要用MIL獲取圖像,然後將其轉換爲OpenCV圖像。這就是爲什麼我需要知道默認像素格式,以配置MIL。

回答

3

的圖像格式由標誌時創建圖像例如CV_8UC3裝置8位像素,無符號3colour通道設置。在彩色圖像中,像素順序是BGR,數據按行順序存儲。

數據未在像素級壓縮 - 它是3bytes /像素(BGRA是某些GPU調用的選項)。

如果行中像素的數量*字節數/像素數不是4的倍數,則數據可能打包在行級別,那麼數據將用零填充到下一個32位邊界。調用mat.ptr(n)返回一個指向第'n'行開始的指針

請注意,您可以通過將數據指針從MIL映像傳遞到另一個可兼容映像格式來共享內存cv :: Mat

+0

謝謝! 順便說一句,我已經嘗試通過MIL圖像緩衝區的墊一個的構造函數,但它沒有工作:/ – Thibel

+0

護理更具體一點嗎?這是不允許的或給你錯誤的結果? –

+0

我無法將Mil圖像傳遞到Mat的原因是因爲我從MIL獲得的圖像具有OpenCV無法識別的類型(MIL_ID)。 – Thibel

1

這取決於你管理圖像的方式:你是否從imread文件中加載它,例如? 看看imread here,例如用一個彩色jpeg,你將有一個3通道格式,總共24位。你可以說得更詳細點嗎?

我不知道這是否是有用的,但是從Android的位圖(傳遞給OpenCV中的字節數組RGBA8888)到OpenCV的圖像(BGR888)轉換圖像時,我有一個類似的問題。 這是我解決它的方法。

cv::Mat orig_image1(orig_height, orig_width, CV_8UC4, image_data); 

int from_to[] = { 0, 2, 1, 1, 2, 0};  
cv::Mat image(orig_height, orig_width, CV_8UC3); 
cv::mixChannels(&orig_image1, 1, &image, 1, from_to, 3); 
orig_image1.release(); 
+0

其實我試圖用另一個名爲MIL(Matrox Imaging Library)的庫來使用OpenCV。我需要用MIL獲取圖像,然後將其轉換爲OpenCV圖像。這就是爲什麼我需要知道默認像素格式,以配置MIL。 – Thibel

+0

OpenCV將圖像作爲cv :: Mat處理,它可以具有不同的深度,如您在此處看到的: http://docs.opencv.org/modules/core/doc/basic_structures.html (搜索「::深度「) 確實,BGR 888格式是常用的,因此我建議您將MIL圖像轉換爲該格式。 我現在不知道MIL是否提供像素字節流,但您可能需要查看這個問題 http://stackoverflow.com/questions/12114605/convert-a-byte-arry-to- opencv-image-in-c 如果您需要交換某些通道,請查看cv :: mixChannels函數。 –

+0

謝謝!我會嘗試你的建議。 – Thibel