转自 http://blog.csdn.net/yirant7/article/details/51273805
利用GUI编程时,有时候,你需要建立一个axes,在axes上显示你的图像,常用的函数有:imshow和image。但是这两个是有着明显的区别的,image是用来显示附标图像,即显示的图像上有x,y坐标轴的显示,可以看到图像的像素大小,而imshow只是显示图像。它们都可以用subplot来定位图像显示的位置,用colormap来定义图像显示用的颜色查找表,比如用colormap(pink),可以把黑白图像显示成带粉红色的图像,很有趣的。具体的区别如下所示:
1.imshow的两种用法:
1) imshow(路径与文件名字符串)
2) imshow(图像矩阵)
若当前figure存在坐标轴,imshow会将产生的image对象(即图像对象)显示在当前坐标轴内;
若当前figure不存在坐标轴,imshow会产生一个隐藏的坐标轴,并将产生的image对象显示于其中;
2.imshow(路径与文件名字符串)等价于:M=imread(路径与文件名字符串);imshow(M);
3.imshow不会扩展填充图像数据,即不会拉伸图像使其铺满坐标轴,而是改变坐标轴宽高比使其适应图像数据;
4.image的用法:
M=imread(路径与文件名字符串);image(M);
5.image不会改变坐标轴的大小尺寸,而是扩展填充图像矩阵,使其铺满坐标轴区域。
image不会改变坐标轴的大小尺寸,而是扩展填充图像矩阵,使其铺满坐标轴区域。
image是用来显示附标图像,即显示的图像上有x,y坐标轴的显示,可以看到图像的像素大小。
在这里最值得注意的是要显示的图像像素矩阵的数据类型。显示真彩色图像像素三维矩阵X,如果是uint8类型,要求矩阵的数据范围为0-255,如果是double型,则其数据范围为0-1,要不就会出错或者出现空白页。类型转换很简单,如果你原来的数值是uint8,在运算中转换为double后,实际要显示的数值没有改变的话,只要用uint8(X)就可转换为uint8型,如果不想转换频繁,也可在显示时用X/255来转换为符合0-1double类型范围要求的数值显示。如果显示索引图像(二维矩阵),因为不同数据类型对应颜色查找表colormap的基点不同,会有所区别,如果不对的话,会出现很多意外的显示效果的。如果索引图像像素数值是double型,则它的取值范围为1-length(colormap),数值起点为1,则矩阵中数值为1的对应colormap中第一行数据,如果索引图像像素数值是uint8,则取值范围为0-255,数值起点为0,则矩阵中数值为0的对应colormap中第一行数据,所以索引图像这两个数据类型之间的转换,要考虑到+1或-1。直接用uint8或double转换则会查找移位,产生失真情况。uint16数据类型与uint8类似,取值范围为0-65536。
image不会改变坐标轴的大小尺寸,而是扩展填充图像矩阵,使其铺满坐标轴区域。
image是用来显示附标图像,即显示的图像上有x,y坐标轴的显示,可以看到图像的像素大小。