当前位置: 首页 > article >正文

027_UIImage_in_Matlab图形界面开发中的图片

在这里插入图片描述

Matlab眼中的图形

图形在计算科学中扮演重要角色,毕竟,人人都和赌毒不共戴天。

在Matlab中,图形不过是一个平凡无奇的矩阵。大部分时候,图形都描述为 M × N × 3 M \times N \times 3 M×N×3的矩阵,其中 M M M N N 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:显示图形,通过gcfgca获取当前的图形和坐标轴
  • 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));

在这里插入图片描述

这个方法好像真的用得挺多的。

总结

  1. 图形在Matlab中是一个矩阵
  2. UIImage是Matlab图形界面开发中常用的控件
  3. 通过imreadimwrite可以读取和保存图形
  4. 图像也可以存储为mat文件,乃至文本文件,前者通过saveload可以保存和加载图形,后者通过writematrixreadmatrix可以保存和加载。

http://www.kler.cn/a/373294.html

相关文章:

  • ARM base instruction -- bfc
  • 链接动态库
  • 阿里云物联网的通信方式
  • Centos下安装Maven(无坑版)
  • java装饰器设计模式
  • Tenda路由器 敏感信息泄露
  • linux之网络子系统- 内核发送数据包流程以及相关实际问题
  • SpringBoot篇(监控)
  • HTML基本类型
  • 程序员转项目经理,我们必须掌握的3大核心要素
  • 一款专业获取 iOS 设备的 UDID 工具|一键获取iPhone iPad设备的 UDID
  • src漏洞挖掘#信息收集#网络安全
  • 前端性能优化全攻略:提升用户体验,加速页面加载
  • ArcGIS Pro SDK (十九)场景图层
  • Java已死,大模型才是未来?
  • 数据安全-接口数据混合加密笔记
  • 单节点kubernetes-1.20二进制部署
  • 北京市委决定:这所4校合并的高校,“一把手”调整
  • 【flask】 前后端通信方式 原生js的ajax,总结
  • 【面试全纪实 | Linux 03 安全类】请回答,你真的了解Linux吗?
  • 推荐基于Hadoop的大数据相关环境安装
  • 【WPF】用于图形绘制的三个重要类:Canvas 类,PathGeometry 类,Path 类
  • 天锐绿盾加密软件与Ping32:企业数据安全备受关注的两款加密软件
  • 算法定制LiteAIServer视频智能分析软件的过亮、过暗及抖动检测应用场景
  • 【项目实战】通过LLaMaFactory+Qwen2-VL-2B微调一个多模态医疗大模型
  • 【01】ZooKeeper特性与节点数据类型