Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在MATLAB中在RGB565和RGB24图像格式之间转换?

我从微处理器输出RGB矩阵,该矩阵输出RGB565格式的图像。我想将其读入MATLAB,将其转换为RGB24格式,然后输出图像。我该怎么做呢?



回答:

首先,您必须将数据从文本文件读取到MATLAB中的矩阵中。由于我不知道文本文件的格式,因此我只能建议您可能需要使用fscanf函数读取所有值(可能是uint16类型),然后可能需要重塑使用函数reshape值转换为N×M图像矩阵。

假设您已完成所有操作,现在您有了一个无符号16位整数的N×M矩阵img 。首先,可以使用函数bitand提取红色,绿色和蓝色分量的位,其位置在16位整数中如下所示:



接下来,您可以使用bitshift和乘以比例因子的功能将红色,绿色和蓝色值缩放到0到255的范围,然后使用uint8函数将它们转换为无符号的8位整数。这将为您提供三个与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-by-M-by-3 RGB图像矩阵中,然后使用imwrite函数将图像保存到RGB24位图文件中:

imgRGB = cat(3, imgR, imgG, imgB); % Concatenate along the third dimension imwrite(imgRGB, 'myImage.bmp'); % Output the image to a file 例:

使用随机生成的uint16值的100 x 100矩阵并应用上述转换,结果如下:

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');



更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 21:20


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.