Matlab中UIImage的图形界面开发与图像处理
创作时间:
作者:
@小白创作中心
Matlab中UIImage的图形界面开发与图像处理
引用
CSDN
1.
https://blog.csdn.net/withstand/article/details/143249202
Matlab眼中的图形
在计算科学中,图形扮演着重要角色。在Matlab中,图形被表示为一个矩阵。通常情况下,图像被描述为一个M × N × 3的矩阵,其中M和N分别是图像的高和宽,3代表RGB三个颜色通道。这种表示方法在Matlab中被称为uint8
类型的图像。
% 生成一个随机图像
img = randi([0, 255], 100, 100, 3, 'uint8');
imshow(img);
% 保存图像为PNG格式
exportgraphics(gca, '../matlab-img/rand-img.png');
这里,我们看到每一个位置(也就是像素点)对应一个长度为3的向量,这三个数字代表了这个像素点的颜色。Matlab提供了一系列函数来处理这种特殊的矩阵:
imread
:从文件中读取图像colormap
:设置图像的颜色映射,这个函数确定Matlab如何将图像的数值映射到颜色imwrite
:将图像保存到文件imshow
:显示图像,通过gcf
和gca
获取当前的图形和坐标轴imagesc
:显示图像,但是不会自动调整坐标轴imfinfo
:获取图像的信息
UIImage
在基于uifigure
和App Designer的Matlab图形界面开发中,UIImage
是一个常用的控件,用于显示图像。
% 创建一个uifigure
fig = uifigure;
% 创建一个UIImage
img = imread('../matlab-img/rand-img.png');
uiimg = uiimage(fig, 'ImageSource', img);
% 输出图形界面元素到文件
exportapp(fig, '../matlab-img/app-rand-img.png')
如果我们在这里把img
存成一个mat
文件。
save('../matlab-img/rand-img.mat', 'img');
然后在App Designer中加载这个mat
文件。
% 创建一个uifigure
fig = uifigure;
% 从mat文件中加载图像
load('../matlab-img/rand-img.mat', 'img');
% 做一点小小的处理, 改变颜色
img = img * 0.5;
%
uiimg = uiimage(fig, 'ImageSource', img);
% 输出图形界面元素到文件
exportapp(fig, '../matlab-img/app-rand-img-mat.png')
颜色变深了好多。就是这样做受益不太大,因为,mat
文件的大小稍微会大一点。
-rw-r--r-- 1 qchen qchen 83629 Oct 26 09:38 static/matlab-img/rand-img.mat
-rw-r--r-- 1 qchen qchen 52028 Oct 26 09:26 static/matlab-img/rand-img.png
还可以把图像存成文本文件。
writematrix(img, '../matlab-img/rand-img.txt');
再读取。
img = readmatrix('../matlab-img/rand-img.txt');
这玩意就有点大的过分了……而且,读出来之后,还得转形状,因为3维数组在文本文件中是没法直接支持的。
-rw-r--r-- 1 qchen qchen 83629 Oct 26 09:38 static/matlab-img/rand-img.mat
-rw-r--r-- 1 qchen qchen 52028 Oct 26 09:26 static/matlab-img/rand-img.png
-rw-r--r-- 1 qchen qchen 2785443 Oct 26 09:42 static/matlab-img/rand-img.txt
实在在无聊的话,那就再搞点压缩算法,把这个数组好好压缩一下吧……
ASCII编码图形
还有个用Base64编码的方法,这个方法在网络传输中很常见,因为Base64编码的数据是ASCII编码的,所以可以直接存储在文本文件中。
% Create the data stream as ASCII:
img = randi([0, 255], 20, 30, 'uint8'); % Example image
B64 = org.apache.commons.codec.binary.Base64;
str = char(B64.encode(img(:))).';
这个字符串可以直接存储在文本文件中,然后再读取。或者从网络上下载,然后再解码。字符内容大概就是这样:
% Store in the file:
img64 = ['0Ocg6aEYR4z19yj49XzMJGvqyvWnCdnvrcG+ZKcrtAhGCxjSsVHzCH', ...
'Bhw8svfXKltcFGrqcpHn/1V5U5wEGBsuT1jCMmQddB0D7tWTJAnXla1JWM6', ...
'knBwGGREw2Hx+8hkXgDVinLT4cqmkOnsL9zFTrpJ9OJ/xRxG/YBxtHeFWZC', ...
'zG7pLkMlIt6UjCXan1mDZhM9Hy89agzn8X19VuZeHMdjPWcYIfH0kw88WtI', ...
'DCyumu6VzjEu+MK8uXqDHFO3GfG9yToKC0cukYM+IWfDgjJ+WNU14O9gxOS', ...
's6b0/sbi/n+nAcQmiYQ5q2OB5LUWyCFUPNB+26fZQ8dfaLhTt9n61lXvwJ4', ...
'unLGUNVriK4G6d+x7fn5FWyMge+gHrnnJ7czpMuPeIHfSr6toB4D64KEoUY', ...
'0dG4JqiE+abMdG7TFSIsZNTND2aGaqigSm4D+yobXzJ9VvPrDbxEbIzxavt', ...
'Ns6qKsqotIP8rCI/hqzBedfso26VgMG17HpY5YpVASp1D0/u6WJUb6OHRQp', ...
'gFbFApLWwYmXiys6MIEVGHp2jRt/eIUxucx2wXRCdHcIZ14ITxo/U9rUqrs', ...
'RFBOarYWMesAZpj6gB2bHXFUsh4CS24eSdXmzG9PupEwzBJF5Oui2ykpa2i', ...
'8TW1PB6bc3WpxVmpatfVQZ2Vit5DUR7wpXqji6WLuIX+NxscEGdyXcOgxe7', ...
'5MSOyGIaH3Hxkq72FWSaWQwvBPnGwW7xlrrRxBVRsRTLSbuNkxGXOwWA3yv', ...
'NTq3DVxCrc/YPiliczaL/TylGIFxwirX4wfiUO'];
拿到这个字符串之后,我们可以解码。
B64 = org.apache.commons.codec.binary.Base64;
img = uint8(B64.decode(uint8(img64));
imshow(reshape(img, 20, 30));
这个方法好像真的用得挺多的。
总结
- 图像在Matlab中是一个矩阵
UIImage
是Matlab图形界面开发中常用的控件- 通过
imread
和imwrite
可以读取和保存图像 - 图像也可以存储为
mat
文件,乃至文本文件,前者通过save
和load
可以保存和加载图像,后者通过writematrix
和readmatrix
可以保存和加载。
热门推荐
高血压患者也能慢跑?专家揭秘三大好处
350美元经济学视角下的微观消费决策分析
沈阳故宫&北陵公园:绝美打卡地摄影攻略
咸阳招商引资实现“双超”:合同引资破千亿,外资完成率超139%
12306 App抢票攻略:从注册到购票全流程详解
从西双版纳到成都:16小时自驾之旅,打卡多个网红景点
理性看待彩票投资:从基础知识到责任彩票建设
退休生活不孤单:5种方式保持活力,乐享社交新人生
6.2秒预警150万人,中国地震预警网加速建设中
南太行宝泉度假区:绝美自然景观不容错过
G3476次高铁南宁至郑州,11小时畅达21城
红牛快速提神,东鹏持久续航:能量饮料如何选
绵阳三大必打卡网红景点揭秘:从羌族文化到自然风光
网红“点痣药水”真能不留痕?
自驾游沈阳故宫,探秘清朝皇家文化
Word图片放大技巧全攻略:从基础到批量处理
双十一装修狂欢节:墙砖铺装省钱攻略
母亲祭日:鲜花寄哀思,祭文诉衷肠
奥希替尼用药指南:4类食物需忌口,这些饮食建议请收好
车厘子:降尿酸的美味助手
引体向上入门指南:六大好处+新手训练方法
黄帝与白泽:上古神话中的智慧之遇
胰岛素阻抗是什么?通过饮食、运动两大原则改善
《小王子》读书心得体会
伊犁摄影攻略:从蓝墙黛瓦到紫色浪漫
库尔德女兵:从科巴尼到国际舞台的反恐先锋
五行揭秘:如何给属蛇男孩起个霸气名字?
北京交通事故远程处理再升级:时间延长、范围扩大、功能更智能
詹姆斯成NBA总得分王,乔丹科比各有千秋
改善眼袋问题 玻尿酸与手术哪种方式比较有效