2015-06-15 5 views
0

Я пытаюсь отправить фрейм из камеры Intel realsense в Matlab. dDisplaying изображения на imshow (...) или изображение (...) не сделает работу, так как изображение является RGBA изображения ... Я послал изображение объекта из C#:RGBa изображение от intel realsense до matlab

matlab.Feval("getImage", 1, out result, bitmap_data); 

Есть функция, которая может отображать рамку?

ответ

0

Вам придется играть с точной Feval реализацией, но если бы вы были impelment непосредственно в MATLAB есть два варианта

1.Simply игнорировать альфа-канал

%this says show all rows, all cols, for channels 1 through 3 or R,G,B 
imshow(rgba_im(:,:,1:3)); 

2.Use alpha channel

%this says show all rows, all cols, for channels 1 through 3 or R,G,B 
%also saves the handle to the newly drawn image 
hndl = imshow(rgba_im(:,:,1:3)); 

%isolates alpha channel 
alpha = rgba_im(:,:,4); 

%displays alpha channel 
set(hndl , 'AlphaData', alpha); 

EDIT

Теперь, когда я знаю, что ваши данные не в стандартном формате RGBA здесь код, чтобы исправить это, комментарии должны сказать вам все, что нужно

[num_rows,num_cols_x4]=size(rgba_matrix); 

%we have to transpose the array to get it to unfold properly, which is 
%first by columns, then rows 
at = rgba_matrix.'; 

%converts data from [r1 g1 b1 a1 r2 g2 b2 a2 r3 g3 b3 a3....] to 
% red_chan = [r1 r2 r3...] 
% green_chan = [g1 g2 g3...] 
% blue_chan = [b1 b2 b3...] 
% alpha_chan = [a1 a2 a3...] 
% it says start at some index and grab every 4th element till the end of the 
% matrix 
red_chan = at(1:4:end); 
grn_chan = at(2:4:end); 
blu_chan = at(3:4:end); 
alp_chan = at(4:4:end); 

% reshape each channel from one long vector into a num_rows x (num_cols_x4/4) 
red_chan = reshape(red_chan, num_cols_x4/4, num_rows).'; 
grn_chan = reshape(grn_chan, num_cols_x4/4, num_rows).'; 
blu_chan = reshape(blu_chan, num_cols_x4/4, num_rows).'; 
alp_chan = reshape(alp_chan, num_cols_x4/4, num_rows).'; 

% we concatenate the channels into a num_rows x (num_cols_x4/4) x 4 matrix 
standard_rgba = cat(3,red_chan,grn_chan,blu_chan,alp_chan); 

С этого момента вы можете сделать обработку я предложил используя массив standard_rgba. Может быть более эффективный способ написать этот код, но я хотел сделать его максимально понятным и понятным, надеюсь, что это поможет

+0

Hey @andrew, Объект, посланный в Matlab, представляет собой массив, который построен в Таким образом: [R, G, B, A, R, G, B, A, R, G, B, A .....], первый бит красной матрицы, первый бит матрицы Грина, первый бит синей матрицы и первый бит альфа-матрицы ... Так что мне нужно пройти через массив и построить матрицы, или есть более умный способ сделать это в matlab ?? Заранее спасибо !! –

+0

@MarounSassine Я добавил код для преобразования вашей матрицы в стандартный формат rgba. Я предположил, что если ваше изображение «MxN», то ваша матрица rgba была «Mx (N * 4)», так как каждый столбец был расширен до r, g, b, a. надеюсь, это поможет – andrew

+0

@ Я проверю это. Большое спасибо !! –

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

  • Нет связанных вопросов^_^