Matlab:利用Matlab软件进行GUI界面设计实现图像的基本操作

📌数模之路+Matlab 专栏正在持续更新中,案例的原理图解析、各种模块分析💖这里都有哦,同时也欢迎大家订阅专栏,获取更多详细信息哦✊✊✊
✨个人主页:零小唬的博客主页
🥂欢迎大家 👍点赞 📨评论 🔔收藏
✨作者简介:20级计算机专业学生一枚,来自宁夏,可能会去做大前端,目前还在努力学习并记录博客中🧸
🎀本系列专栏: 数模之路+Matlab
💕希望本文对你在学习Matlab软件和参加数学建模的过程中有所帮助,如有不足请指正一起学习,一起进步🥇
⛪座右铭:只要你还愿意努力,世界一定会给你惊喜


实验要求

在这里插入图片描述

实验过程

  如下图所示,需要拖入自己需要的控件和按钮,根据自己的喜好进行修改样式即可.
在这里插入图片描述
在这里插入图片描述


回调函数

上传图片

function upload_image(hObject, eventdata, handles)
[FileName,PathName] = uigetfile({'*.jpg;*.jpeg;*.png;*.bmp'},'选择一张图片');
if ~isnumeric(FileName)
    img = imread(fullfile(PathName, FileName));
    if numel(size(img))==3
        img = rgb2gray(img);
    end
    axes(handles.axes1);
    imshow(img, []);
    handles.img = img;
end

  该函数使用 uigetfile() 函数打开文件选择框,以便用户选择他们想要上传的图片。最后,它在 axes1 中使用 imshow() 函数显示该图像,并将 img 存储为 handles 中的一个字段以便其他回调函数使用。

保存图片

function store_image(hObject, eventdata, handles)
img = handles.img; 
if ~isempty(img) 
    [filename, pathname] = uiputfile({'*.jpg','JPEG files (*.jpg)';'*.png','PNG files (*.png)'},'Save Image'); 
    if ~isnumeric(filename) && ~isnumeric(pathname) 
        fullname = fullfile(pathname,filename); 
        imwrite(img, fullname); 
    end
end

  首先,它检查 handles 中的存储的图像 img 是否为空。如果不为空,则使用 uiputfile() 函数打开文件对话框,以便用户选择图像的保存位置和名称。然后,它检查文件名和路径是否为数字(文件对话框可以返回数字),以确保用户没有取消选择。最后,它使用 imwrite() 函数将图像写入用户选择的文件。

清空重置

function empty_reset(hObject, eventdata, handles)
% Clear
handles.img = [];
axes(handles.axes1);
cla;
axes(handles.axes2);
cla;

  这是一个用于清除 axes1 和 axes2 中图像的回调函数。它会将 handles 中存储的 img 变量清空,然后使用 cla() 函数清除 axes1 和 axes2 中的任何内容。

关闭界面

function close(hObject, eventdata, handles)
% Close 
delete(handles.figure1);

  这是一个用于关闭 GUI 窗口的回调函数。它通过 delete() 函数删除 handles.figure1 对象,从而关闭 GUI 窗口。

水平镜像

function horizontal_mirror(hObject, eventdata, handles)
% 读取当前Axes中的图片
img = getimage(handles.axes1);
% 水平翻转
img = flip(img, 2);
% 显示翻转后的图片
imshow(img, 'parent', handles.axes2);

  这是一个用于实现图像水平翻转的回调函数。它通过 getimage() 函数获取当前Axes中的图像数据,并使用 flip() 函数对图像数据进行水平翻转。然后,它使用 imshow() 函数在第二个Axes中显示翻转后的图像。

竖直镜像

function vertical_mirror(hObject, eventdata, handles)
% 读取当前Axes中的图片
img = getimage(handles.axes1);
% 竖直翻转
img = flip(img, 1);
% 显示翻转后的图片
imshow(img, 'parent', handles.axes2);

  这是一个实现图像竖直翻转的回调函数。类似于 horizontal_mirror 函数,该函数也使用 getimage() 函数获取当前 Axes 中的图像数据,并使用 flip() 函数对图像数据进行竖直翻转。最后,它使用 imshow() 函数在第二个 Axes 中显示翻转后的图像。

平移操作

  可以使用imwarp() 函数对一张图片进行平移变换。然后,您可以使用 imagesc() 函数将变换后的图像显示在第二个坐标系 axes2

function translation(hObject, event)
    % 获取当前选定的点坐标
    point = get(gca,'CurrentPoint');
    x = point(1,1);
    y = point(1,2);

    image = imread('myImage.png');
    tform = affine2d([1 0 0; 0 1 0; x y 1]); 
    warpedImage = imwarp(image, tform, 'OutputView', imref2d(size(image)));

    % 在第二个坐标系中显示变换后的图像
    axes2 = findobj(gcf, 'Tag', 'axes2');
    imagesc(warpedImage, 'Parent', axes2);
    axis(axes2, 'equal');
end

  首先获取当前选中点的坐标并创建一个平移变换矩阵。然后,我们使用imread() 函数读取待平移的图片,并使用 imwarp() 函数对图片执行平移变换。最后,我们使用imagesc() 函数将变换后的图片显示在第二个坐标系 axes2中。

function myGUI_CreateFcn(hObject, event)
    % 创建第二个坐标系 axes2
    axes2 = axes('Parent', hObject, 'Tag', 'axes2');
    % 设置 axes2 的位置和大小
    set(axes2, 'Position', [0.5 0.1 0.45 0.8]);
end

  需要在 GUI 的 CreateFcn 回调函数中创建了 axes2,并将其标记为 ‘axes2’。我们还在代码中设置了 axes2 的位置和大小。

缩放操作

  可以使用imresize() 函数对一张图片进行缩放。然后,您可以使用 imagesc() 函数将缩放后的图像显示在第二个坐标系 axes2中。

function zoom(hObject, event)
    % 获取当前选定的点坐标
    point = get(gca,'CurrentPoint');
    x = point(1,1);
    y = point(1,2);

    % 获取图片并进行缩放
    image = imread('myImage.png');
    scaleFactor = 0.5; % 缩放因子
    scaledImage = imresize(image, scaleFactor);

    % 在第二个坐标系中显示缩放后的图像
    axes2 = findobj(gcf, 'Tag', 'axes2');
    imagesc(scaledImage, 'Parent', axes2);
    axis(axes2, 'equal');
end

  首先获取当前选中点的坐标并创建一个缩放因子。然后,我们使用imread() 函数读取待缩放的图片,并使用 imresize() 函数对图片进行缩放。最后,我们使用 imagesc() 函数将缩放后的图片显示在第二个坐标系 axes2中。

旋转操作

function rotate(hObject, event)
    % 获取当前选定的点坐标
    point = get(gca,'CurrentPoint');
    x = point(1,1);
    y = point(1,2);

    % 获取图片并进行旋转
    image = imread('myImage.png');
    angle = 30; % 旋转角度
    rotatedImage = imrotate(image, angle);

    % 在第二个坐标系中显示旋转后的图像
    axes2 = findobj(gcf, 'Tag', 'axes2');
    imshow(rotatedImage, 'Parent', axes2);
end

  首先获取当前选中点的坐标并创建一个旋转角度。然后,我们使用imread() 函数读取待旋转的图片,并使用 imrotate() 函数对图片进行旋转。最后,我们使用 imshow() 函数将旋转后的图片显示在第二个坐标系 axes2 中

错切操作

function myCallback(hObject, event)
    % 获取当前选定的点坐标
    point = get(gca,'CurrentPoint');
    x = point(1,1);
    y = point(1,2);

    % 获取图片并进行错切操作
    image = imread('myImage.png');
    shearAngle = 20; 
    tform = affine2d([1, tand(shearAngle), 0; 0, 1, 0; 0, 0, 1]);
    shearedImage = imwarp(image, tform);

    % 在第二个坐标系中显示错切后的图像
    axes2 = findobj(gcf, 'Tag', 'axes2');
    imshow(shearedImage, 'Parent', axes2);
end

  首先获取当前选中点的坐标并创建一个错切角度。然后,我们使用imread() 函数读取待错切的图片,并创建一个仿射变换矩阵,使用 affine2d() 函数将其传递给该函数,并将其作为imwarp() 函数的输入来执行错切操作。最后,我们使用imshow() 函数将错切后的图片显示在第二个坐标系 axes2 中


  🎉记录是为了不停的思考,创作更是为了更好的思考,有人说过:2023年以后的中国市场将永远属于长期主义者,bug是改不完的也是写不完的,只能说这次遇到了希望下次不会在出现同样的bug就行,如果你觉得对您有帮助,欢迎一起交流学习,本人也是一名计算机小白,目前还在努力中~

评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零小唬

你的支持将是我创作的做大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值