clearclcclf reset
set(gcf,'unit','normalized','宽核陆name','图氏宴像旋转','menubar','none','position',[0.2,0.2,0.6,0.6])
set(gcf,'defaultuicontrolunits','normalized')
set(gcf,'defaultuicontrolbackgroundcolor','w')
set(gcf,'defaultuicontrolfontsize',12)
str1='生成图像'str2='旋转90度'
h_push1=uicontrol(gcf,'style','push','position',[0.2,0.05,0.2,0.05],'string',str1)
h_push2=uicontrol(gcf,'style','push','position',[0.6,0.05,0.2,0.05],'string',str2)
set(h_push1,'callback',['sctx'])
set(h_push2,'callback',['xuanzhuan'])
新建m文件,文件名为:sctx.m;内容为:
RGB=imread('meinv.jpg')
imshow(RGB)
新建m文件,文件名为:xuanzhuan.m;内容为:
[a b c]=size(RGB)
for k=1:3
A(:,:,k)=rot90(squeeze(RGB(:,:,k)))%逆时针旋转90度
end
RGB=uint8(A)
imshow(RGB)
clear A
===========================================
找一张美女图片,文件名为:meinv.JPEG,JPG格式。
将所有慎顷文件都拷贝到MATLAB搜索路径下。
在主窗口中输入:tuxiang,按回车即可运行程序。
其实问题不在于彩图或灰度图,而在于图片是真彩色(Truecolor或RGB)还是索引色(Indexed image)。例如常见的JPEG图片属于真彩色,而GIF则是索引色。
索引色的图片数据蠢握侍为一个二维矩阵X,外加一个颜色表map,也就是说读图片时用的语法应该是:
[X, map] = imread(...)
矩阵X的元素为正整数,它所代表的颜色由map中相应位置的颜色决定。map是一个n*3的矩阵,每行代表一个颜色。索引色的图片也可以是彩色的,取决于map里面有哪些颜色。
而真彩色的图片是一个三维数组,数组的前两维分别对应图片的高和宽,第三维的长度为3,其元素分别代表红绿蓝三基色的值。
明白了上面的道理,翻转就不困难了:
x=handles.img % 图像带吵数据
x=x(end:-1:1,:,:) % 上下翻转
x=x(:,end:-1:1,:) % 左右翻转
上面的做法既适用于真彩色,也适用于索引色(其实flipud和fliplr也是采用类似的语皮衡法实现的,但针对的是二维数组,所以对三维数组会出错)。
希望对楼主有帮助,有问题可再追问。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)