2017-01-16 83 views
0

我有一個32位整數數組,其中包含一個3450x3450圖像的像素值我想創建一個Mat圖像。試過以下內容:在OpenCV中加載像素值數組

int *image_array; 
image_array = (int *)malloc(3450*3450*sizeof(int)); 
memset((char *)image_array, 0, sizeof(int)*3450*3450); 
image_array[0] = intensity_of_first_pixel; 
... 
image_array[11902499] = intensity_of_last_pixel; 
Mat M(3450, 3450, CV_32FC1, image_array); 

並且在顯示圖像時我得到一個黑屏。我還應該注意到該數組包含一個16位灰度圖像。

+0

什麼'image_array'點?您能否提供[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例? – slawekwin

回答

1

我想你應該嘗試輸入圖像,我以爲是在RGB [A]格式轉換使用:

cv::Mat m(3450, 3450, CV_8UC1, image_array) // For GRAY image 
cv::Mat m(3450, 3450, CV_8UC3, image_array) // For RGB image 
cv::Mat m(3450, 3450, CV_8UC4, image_array) // For RGBA image 
+0

RGBA圖像格式的代碼有效,但出於某種原因它具有[藍色](http://i.imgur.com/aVMGrrv.png)。這是[結果](http://i.imgur.com/XjbEFIZ.png)我應該得到。我應該注意到圖像是16位灰度。 –

+0

OpenCV使用BGR而不是RGB排序。你需要cvtColor()RGB2BGR –

+0

@ZdaR我試過cv :: Mat m(3450,3450,CV_8UC1,image_array)',它最終給了我[this](http://i.imgur.com/ MmV9NW8.png)。 –