imshow函数的一些问题

因为图片过多就不上传图片各位可随便找两张图片查看效果。

p=imread('lv.jpg');

q=imread('new.png');
[m,n,r]=size(p);
q=imresize(q,[m,n]);
k=imadd(1/2*p,1/2*q,'uint16'); %转化成double合并
%-------------uint16-------------------
figure;
imshow(k);%无法显示
figure;
imshow(uint8(k));%可能是映射到0-255显示,我现在不明白
figure;
imshow(k,[]); %[]没有效果
figure;
imshow(uint8(k),[]);%[]没有用
figure;

imshow(double(k)/256,[]);%效果同上


-----------------------------------------------------------------------------------------

p=imread('lv.jpg');
q=imread('new.png');
[m,n,r]=size(p);
q=imresize(q,[m,n]);
  k1=imadd(p(:,:,1),q(:,:,1),'uint16'); %转换为uint16,不然超出255部分全部变为255
%k=rgb2gray(k);
k2=imadd(p(:,:,2),q(:,:,2),'uint16');
k3=imadd(p(:,:,3),q(:,:,3),'uint16');
k=cat(3,k1,k2,k3);
figure;
imshow(k2);
figure;
imshow(k2,[]); %在这里显示uint16的图像全部是黑色,我是想将uint16位的映射到0-255上显示,效果正常
figure;
imshow(k2,[0,255]); %这里只显示0-255之间的灰度
figure;
imshow(k2/256);%这里由于k2是uint16/256后是0,1,2..(全是整数)所以损失了精度,显示全黑
figure;
imshow(double(k2));%这样先转换精度,在显示大多超过1,所以全白
figure;
imshow(double(k2),[]);%将灰度映射到0-255上,显示效果正常
figure;
imshow(double(k2)/256);%先转换精度在除以256就比较精确了,
%但是显示还是不好和第三个效果一样,只是显示0-1之间的超出1的显示白色
figure;
imshow(double(k2)/256,[]);%效果正常,效果和映射到0-255一样。

-------------------------------------------------------------------------------------------------------

总结:
1.imshow(A)显示的A中符合A数据类型的像素,超出的部分用最高灰度值代替。
2.imshow(A,[])只能用于单色的图,3通道的图没有效果,可能是由于有三个值的原因(RGB值),[]的作用就是映射到0-255灰度上显示。
3.imshow(A,[0,255])显示0-255灰度上的像素

4.两幅彩色图合并可以使用1/2*p--即先转化为double类型,在合并。
5.对于rgb图使用uint16时,直接转化为uint8就可以显示了如imshow(uint8(k)),对于灰度图采用imshow(k,[])就可以显示了

你可能感兴趣的:(imshow函数的一些问题)