如何在 MATLAB 中在 RGB565 和 RGB24 图像格式之间进行转换?
-
01-10-2019 - |
题
我从微处理器获取 RGB 矩阵,该矩阵输出 RGB565 格式的图像。我想将其读入 MATLAB,将其转换为 RGB24 格式,然后输出图像。我该怎么做呢?
解决方案
您首先必须将文本文件中的数据读入 MATLAB 中的矩阵。由于我不知道您的文本文件是什么格式,我只能建议您可能需要使用该功能 fscanf
读取您的所有值(可能是类型 uint16
),那么您可能需要使用该函数将这些值重新整形为 N×M 图像矩阵 reshape
.
假设您已完成所有这些操作,并且现在有一个 N×M 矩阵 img
无符号 16 位整数。首先,您可以使用该功能 bitand
提取红色、绿色和蓝色分量的位,其在 16 位整数中的位置如下所示:
接下来,您可以使用该功能 bitshift
乘以比例因子,将红色、绿色和蓝色值缩放到 0 到 255 的范围,然后使用该函数将它们转换为无符号 8 位整数 uint8
. 。这将为您提供三个颜色分量矩阵,其大小与 img
:
imgR = uint8((255/31).*bitshift(bitand(img, 63488), -11)); % Red component
imgG = uint8((255/63).*bitshift(bitand(img, 2016), -5)); % Green component
imgB = uint8((255/31).*bitand(img, 31)); % Blue component
现在您可以使用该功能 cat
将三个颜色分量放入 N×M×3 RGB 图像矩阵中,然后使用该函数将图像保存到 RGB24 位图文件 imwrite
:
imgRGB = cat(3, imgR, imgG, imgB); % Concatenate along the third dimension
imwrite(imgRGB, 'myImage.bmp'); % Output the image to a file
例子:
使用随机生成的 100×100 uint16 值矩阵并应用上述转换,结果如下:
img = randi([0 65535], 100, 100, 'uint16');
% Perform the above conversions to get imgRGB
subplot(1, 2, 1);
imshow(img);
title('Random uint16 image');
subplot(1, 2, 2);
imshow(imgRGB);
title('Corresponding RGB image');
其他提示
RGB565表示5位红色,6位绿色和5位蓝色。 RGB24由8位红色,8位绿色和8位蓝色制成。
使用Bitget和Bitset,您可以转换数据。
http://www.mathworks.de/access/helpdesk/help/techdoc/ref/bitget.html
不隶属于 StackOverflow