2017-01-16 2 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)', и это в конечном итоге дало мне [это] (http://i.imgur.com/) MmV9NW8.png). –

Смежные вопросы