Matlab GUI 绘制三维图形,并实现使用控件使图形旋转

Matlab GUI 绘制三维图形,并实现使用控件使图形旋转,第1张

新建m文件,文件名为:tuxiang.m;内容为:

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也是采用类似的语皮衡法实现的,但针对的是二维数组,所以对三维数组会出错)。

希望对楼主有帮助,有问题可再追问。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12343133.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存