📌数模之路+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 中
。文章来源:https://www.toymoban.com/news/detail-458033.html
🎉记录是为了不停的思考,创作更是为了更好的思考
,有人说过:2023年以后的中国市场将永远属于长期主义者,bug是改不完的也是写不完的,只能说这次遇到了希望下次不会在出现同样的bug就行,如果你觉得对您有帮助,欢迎一起交流学习,本人也是一名计算机小白,目前还在努力中~文章来源地址https://www.toymoban.com/news/detail-458033.html
到了这里,关于Matlab:利用Matlab软件进行GUI界面设计实现图像的基本操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!