关于使用matlab imwrite函数转换三维数组为图像时,导致结果为空白或大部分损坏的原因

关于使用matlab imwrite函数转换三维数组为图像时,导致结果为空白或大部分损坏的原因

问题起因

是想做一个根据rgb数据值生成图像的操作,无奈不能自己捏造大量的数据,来生成一幅像样的图像,我只能从网上随便拉了张,把他的rgb数据导出,然后再导入成三维矩阵从而根据rgb数据生成图像。

流程

先在网上拉张图!
1
好不容易找了张小一点的

接下来是使用matlab读取保存图像rgb数据

clear
clc

ttt=imread('tttt.jpg');
image_r=ttt(:,:,1);
image_g=ttt(:,:,2);
image_b=ttt(:,:,3);

xlswrite('image_r.xlsx',image_r);
xlswrite('image_g.xlsx',image_g);
xlswrite('image_b.xlsx',image_b);

现在已经把r,g,b数据分别保存在三个xlsx文件中了

接下来进行第二步,从xlsx文件中导出r,g,b数据然后生成图像

clear
clc

r = xlsread('image_r.xlsx');
g = xlsread('image_g.xlsx');
b = xlsread('image_b.xlsx');
imdata(:,:,1) = r;
imdata(:,:,2) = g;
imdata(:,:,3) = b;
imwrite(imdata,'result.jpg')%写图片
imshow(imdata)

好了问题来了
生成的图长成了这样
02
当然还会有别的情况,我也尝试了,结果要不是空白要不是长这样

我他喵本来以为,因为众所周知jpg是个有损压缩,我想这何止有损,简直全损

后来导出文件改成.bmp一样长这样

后来我看有人说是数据类型的原因,说255以内必须是int,如果是double要全部除以255,改在0-1.0以内,可是我试了也没用

后来我突然想到,这么做光有rgb数据了,图像的头文件呢?没有!

头文件是个好东西,然后我翻遍了matlab的函数也没找到怎么提取头文件,要是有请各位大佬给我评论一声,我学疏浅薄,实在没找到。

最后的解决办法就是。导入数据时先把原图导进来,然后把它的r,g,b依次替换。这样头文件依旧存在,只是改变了数据文件而已。

clear
clc
imdata = imread('tttt.jpg');
r = xlsread('image_r.xlsx');
g = xlsread('image_g.xlsx');
b = xlsread('image_b.xlsx');
imdata(:,:,1) = r;
imdata(:,:,2) = g;
imdata(:,:,3) = b;
imwrite(imdata,'result.bmp')%

最后完美生成效果图
在这里插入图片描述
不过为了大家看出图片的rgb的确是修改过了的,而不是原图数据
我暂且把g,b图层换一下再给大家显示一次
04
这下没问题了,的确是rgb改变了的!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值