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

MATLAB GUI界面设计 第四章——图像的绘制与显示

参考教程:MATLAB App Designer基础教程Matlab GUI界面设计(全集更新完毕-用户界面设计appdesigner(中文)Matlab Gui教程_哔哩哔哩_bilibili

一、坐标区组件

1、函数图像的绘制与显示

(1)新建一个工程,在画布中添加按钮组件和坐标区UIAxes组件,其中可对坐标区组件的标题、XY标签、是否显示网格和边框、背景颜色等属性进行更改。

(2)对按钮添加回调函数,回调函数执行的代码如下,主要功能为在函数图像显示器绘制两个共x轴函数图像。

% 生成X轴采样点的值
x = 0:0.01:10;% 生成Y轴对应X轴采样点的值
y1 = sin(x);
y2 = cos(x);% 使用plot函数绘图,指定绘图区域为坐标区(plot函数的第一个参数为坐标区对象)
hold(app.UIAxes,"on"); 		% 设置重复在坐标区上画图,不擦除上一次的图象
grid(app.UIAxes,"on"); 		% 坐标区中显示网格
plot(app.UIAxes,x,y1,'r'); 	% 在坐标区中绘制f=(x,y1)图像,颜色为红色
plot(app.UIAxes,x,y2,'g'); 	% 在坐标区中绘制f=(x,y2)图像,颜色为绿色

(3)试运行程序,点击绘图按钮后即可生成函数图像。

(4)在回调函数中增加语句“axis(app.UIAxes, ‘off’);”,即可隐藏坐标区的坐标轴,实际上,很多先前在MATLAB绘图中讲到的命令(如“hold on”和“grid on”),都可以通过这种演变方式实现在坐标区绘图中。

2、外部图像的显示

(1)新建一个工程,在画布中添加按钮组件和坐标区UIAxes组件,其中坐标区组件用于显示图片,所以XY标签可以直接去掉,值置为空即可。

(2)对按钮添加回调函数,回调函数执行的代码如下,主要功能为读取MATLAB路径下的一个图片文件,并显示在坐标区组件上。(温馨提示,“im”开头的系统函数几乎都与图像处理有关)

% 读入图片文件
photo_file = 'C:\Users\Zevalin\Documents\MATLAB\Big_Big_Wolf.jpg';
im = imread(photo_file); % “im”开头的系统函数几乎都与图像处理有关% 图片显示在坐标区
imshow(im, 'Parent', app.UIAxes); % 图像显示在坐标区

(3)试运行程序,点击图像显示按钮后即可生成灰太狼图像。

二、案例——图片处理APP

1、其它知识储备

(1)MATLAB中的msgbox为信息对话框,执行msgbox语句后便会弹出信息对话框,其基本用法有如下几种:

①“msgbox('显示内容', '标题')”。

②“msgbox('显示内容', '标题', '系统图标')”,系统图标主要有none、error、help、warn。

③“msgbox('显示内容', '标题', 'custom', 'lconData', 'lconCMap')”。

(2)MATLAB中的questdlg为提问对话框,执行questdlg语句后便会弹出提问对话框,其基本用法如下:

①“questdlg('提问内容', '标题', '选项1', '选项2', '选项3', '默认选项(需与前面的一个选项相同)')”,其中可选的选项可以是两个或三个,此外,弹出的提问对话框会默认高亮一个选项(按回车就会默认选择它)。

②当选择一个选项后,该语句会返回用户的选择。

(3)uigetfile语句可以在UI设计中实现获取文件信息的功能,具体用法如下:

[FileName,PathName,Filterindex]= uigetfile(FilterSpec,DialogTitle,DefaultName)

        FileName:返回的文件名,如未选择文件将返回0

        PathName:返回的文件的路径,如未选择文件将返回0

        Filterlndex:选择的文件类型,如未选择文件将返回0

        FilterSpec:可选的文件类型设置,每个选项的格式为“*.<文件格式缩写>”,其中星号是正则表达式中的通配符,所有选项用大括号括起,半角分号分隔,如果写入“*.*”选项,则增加可选所有文件类型的选项

        DialogTitle:打开对话框的标题,一般位于左上角,可有可无,如果不写入此参数,默认为“选择要打开的文件”

        DefaultName:默认指向的文件名,可有可无

(4)MATLAB中的errordlg为错误提示框,执行errordlg语句后便会弹出错误提示框,其基本用法如下:

“errordlg('错误信息','标题')”。

2、前端制作

        添加3个按钮组件和4个坐标区组件进入画布。

3、后端制作

(1)右键“关于”按钮组件,添加回调函数,其中的代码如下,主要功能为显示对话框,告知用户本程序的功能。

msgbox('这是一个图像处理小程序', '关于', 'help');

(2)右键“退出程序”按钮组件,添加回调函数,其中的代码如下,主要功能为询问用户是否要退出程序,并执行用户的选择。

% 用提问对话框询问用户的选择并记入变量choice
choice = questdlg('您确定要退出程序吗', '程序退出流程', '狠心离去', '再想一想', '再想一想');% 执行用户的选择
switch choicecase '狠心离去' 			  % 退出程序delete(app.UIFigure); % 删除画布(画布对象下所有成员对象也会被删除)returncase '再想一想'return
end

(3)右键“选择图片文件”按钮组件,添加回调函数,其中的代码如下,主要功能为让用户选择图片文件,读入它的位置和文件名信息,根据这些打开对应的图片文件,然后分别转化为二值化图片、灰度图和边缘检测图片,并显示在相应区域。(需要说明的是,图像处理是一门大学问,此处不进行深入介绍)

% 让用户选择图片文件,读入它的位置和文件名信息
[FileName,PathName]= uigetfile({'*.jpg';'*.*'},'选择图片文件');% 判断用户是否未选中文件,未选中需要报错
if isequal(FileName, 0) || isequal(PathName, 0)errordlg('没有选中文件','错误');return
else% 记录选中文件的名字和路径,将它们连接起来,用于后续读入图片文件内容files = strcat(PathName,FileName);
end% 读入图片文件内容
im = imread(files);% 图像处理并显示
% 显示原图
imshow(im, 'Parent', app.UIAxes);
% 将原图处理成灰度图并显示灰度图
gray_image = rgb2gray(im);
imshow(gray_image, 'Parent', app.UIAxes_3);
% 将灰度图二值化并显示二值化图片
bw_image = imbinarize(gray_image);
imshow(bw_image, 'Parent', app.UIAxes_2);
% 将灰度图转化为边缘检测图片并显示边缘检测图片
edge_image = edge(gray_image, 'Canny');
imshow(edge_image, 'Parent', app.UIAxes_4);msgbox('转换完成','提示');

4、试运行

        保存文件后点击“运行”,测试APP是否满足需求。

http://www.lqws.cn/news/498151.html

相关文章:

  • 项目上线(若依前后分离版)
  • Kubernetes安全
  • Frida Hook Android App 点击事件实战指南:从进程识别到成功注入
  • H5新增属性
  • C++ Vector 基础入门操作
  • 技能系统详解(2)——特效表现
  • nnv开源神经网络验证软件工具
  • 【第二章:机器学习与神经网络概述】03.类算法理论与实践-(1)逻辑回归(Logistic Regression)
  • 华大北斗TAU951M-P200单频定位模块 多系统冗余保障永不掉线 物流/车载导航首选
  • 历史项目依赖库Bugfix技巧-类覆盖
  • LED-Merging: 无需训练的模型合并框架,兼顾LLM安全和性能!!
  • Spring Boot:运用Redis统计用户在线数量
  • Flask学习笔记
  • 1.2、CAN总线帧格式
  • DeepSeek今天喝什么随机奶茶推荐器
  • Redis简介
  • 通过使用gitee发布项目到Maven中央仓库最新教程
  • 前端高频面试题汇总
  • 【AI 测试】测试用例设计:人工智能语言大模型性能测试用例设计
  • Qt源码分析: QChildEvent
  • Robyn高性能Web框架系列04:事件、中间件与错误处理
  • 异步IO框架io_uring实现TCP服务器
  • Postgresql中不同数据类型的长度限制
  • 用Python“看见未来”:自动驾驶感知系统实战全解析
  • 矩阵阶数(线性代数) vs. 张量维度(深度学习):线性代数与深度学习的基石辨析,再也不会被矩阵阶数给混淆了
  • react快速开始项目模板
  • 越南数学家吴宝珠恶搞式证明朗兰兹纲领
  • HTML基础结构
  • 速通KVM(云计算学习指南)
  • /var/lib/docker/overlay2目录过大怎么办