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是否满足需求。