目录

MATLAB的GUI界面设计:

MATLAB通过资源管理器导入图片:

MATLAB GUI通过文件管理器保存图片:

MATLAB利用摄像头进行截图抓拍并导入:

滤波器部分:

判断图像是否已经灰度化的方法:

硬币检测:

红苹果提取:

矩形和圆形检测:

照片动漫滤镜:

照片素描滤镜:

老照片风格:

油画滤镜:

美化GUI:


大作业进度开始的有点晚,记一下学习心得。

首先学习一下GUI界面的制作。看了一下老师给的别人的源码,功能很多也很好,但是和我们自己的作业要求有点差别,而且也不能copy。我用的2020版matlab,直接在软件找已经找不到GUI,好像以后都要变成app了,但是这次大作业我们还是得做GUI,哈哈。

找了一下GUI基础教程。(补充一下心得:建议先了解一下handles再做回调会简单很多)

MATLAB的GUI界面设计:

Matlab实践之图形化界面设计与使用

从文件夹加载图片的GUI教程,创建按钮和坐标区。

GUI加载图片

新建一个GUI,保存为fig格式。实验要求显示的图片感觉好多,都不知道怎么排版比较好。建议多使用对齐工具和按钮组,让界面看起来更舒服。了解了一下基础的回弹事件,感觉GUI也挺简单的,放到对应函数里面去就好了。

【新手向】手把手带你入门的MATLAB的GUI编程实例

打算先做一下GUI界面然后再慢慢调用函数。

下午做了一个简单的基础界面。

今天复习线代去了,晚上做一下matlab。

改了一下每个组件的Tag,然后在导入图片的callback回调事件中加入代码。

% '*.*'为显示当前文件夹中的所有文件;
% select a picture为文件对话框的标题;
% 'multiselect','on'为打开选择多个模式(默认为关);
axes(handles.origin)
[fn, pn, ~] = uigetfile('*.*','请选择所要识别的图片','multiselect','on');
I = imread([pn fn]);%读取图像参数为图像名称和图像路径
imshow(I);

参考了一下别人的代码,应该在界面初始化的时候设置所有按钮无法点击,不然有功能没有图片会出现问题,先加载图片才能使用功能。

%设置按钮不可点击
set(handles.grey,'Enable','off');
set(handles.binary,'Enable','off');
set(handles.getapple,'Enable','off');
set(handles.getcoin,'Enable','off');
set(handles.balance,'Enable','off');
set(handles.picadd,'Enable','off');
set(handles.picsub,'Enable','off');
set(handles.light,'Enable','off');
……%写一个函数方便调用
function on(handles)
set(handles.grey,'Enable','on');
set(handles.binary,'Enable','on');
set(handles.getapple,'Enable','on');
set(handles.getcoin,'Enable','on');
set(handles.balance,'Enable','on');
set(handles.picadd,'Enable','on');
set(handles.picsub,'Enable','on');
set(handles.light,'Enable','on');
……
%调用方法
on(handles)%激活按钮

MATLAB GUI通过文件管理器保存图片:

Matlab GUI 界面编程:保存坐标系中的图片

h = figure('visible','off');new_axes = copyobj(handles.window2,h);%axes1表示坐标系对象set(new_axes,'Units','normalized','Position',[0.1 0.1 0.8 0.8]);[filename, pathname] = uiputfile({'*.png';'*.bmp';'*.jpg'},'图片保存为');if filename ~= 0file = strcat(pathname,filename);saveas(h,file);msgbox('图像已成功保存','确认!','warn');elsemsgbox('已取消','确认','warn');end

MATLAB利用摄像头进行截图抓拍并导入:

周末早起做作业了,加载摄像头,用的这个教程。

MATLAB调用USB摄像头实现过程

报错:错误使用 webcam (line 116) 已存在与网络摄像机 EasyCamera 的有效连接。不能创建与同一网络摄像机的另一连接。

解决方法:

clear    % 清除变量
clc     % 清除界面信息

在Gui界面中显示视频流尽量使用Image Acquisition Toolbox。但是我装不了,所以还是使用的其他方法,看起来还是很成功的。

webcamlist;
cam1 = webcam(1);
img = snapshot(cam1); %抓拍图片
axes(handles.origin) %展示到第一个坐标
imshow(img);handles.img=img;%存入句柄
handles.img2=img;axes(handles.result) %展示到第二个坐标
imshow(handles.img2);clear cam1 %关闭摄像头
on(handles)%激活按钮
guidata(hObject, handles);

图片灰度化,我刚开始不是很懂,把img变成全局变量,然后在后面进行调用。在灰度化的时候要使用有颜色的rgb图片才行,不能用已经灰度化的图片,再加载直方图。

在进行直方图的加载的时候我又遇到了第一次做实验遇到的错误,像这样,要把figure写在前面,把imhist函数写在最后,否则加载的直方图就是一条直线。

%普通加载
figure(6); subplot(1,2,1);
imhist(g,64);%在gui中加载直方图
axes(handles.axes4)
imhist(handles.img2,64);  %转换直方图

坐标轴稍微有一点重叠,但是应该不影响观看,就这样吧。 亮度变化也做好了。

后面发现自己用global全局变量传递数据的办法有点笨,改成了用句柄,哎,真的很折腾。

guidata handles理解

放几个常用的交互传递GUI参数的代码

%获取滑动条选择的参数
th = get(handles.binary,'Value')%0~1之间的一个数值
%滑动条最大值为1.0,最小值为0.0是因为im2bw函数的阈值输入在0~1之间
%二值化时自定义拖动选择的阈值
%把滑动条的数字传递到GUI界面的文本框中
set(handles.text11,'String',num2str(th));%获取可编辑文本框edit中的参数,记得类型是string,需要转成num数值类型才能使用
handles.angle=str2num(get(handles.edit3,'String'));%获得输入值

二值化,图像叠加和亮度变化也做完了。在做的时候不断调整gui,使其更加合理。

运动模糊和对数,指数变换已实现。(这些都是平时作业有的代码就不放出来了)今天做了差不多六个小时,有点累。

继续

val=get(hObject,'Value');%获得选取项
%不同选项事件
switch valcase 1%对话框helpdlg('请选择需要添加的噪声','Morphological Operations');case 2handles.img3=imnoise(handles.img3,'gaussian',0.02);axes(handles.uppic); %在右边进阶图像中展示imshow(handles.img3);case 3handles.img3=imnoise(handles.img3,'salt & pepper',0.02);axes(handles.uppic); %在右边进阶图像中展示imshow(handles.img3);
end
guidata(hObject, handles);

像这种必须要有3x3或者5x5模板才能进行滤波器操作,有前提条件的情况,那么选择的radiobutton最好添加一个默认值,也就是有默认勾选,在CreateFcn回调里面添加。

function x3_CreateFcn(hObject, eventdata, handles)
%初始值
handles.mould=3;
guidata(hObject, handles);%保存句柄

滤波器部分:

高斯滤波在实验3的时候没有做,花了一点时间找代码和学习。 handles真好用,什么类型的值都可以存ovo

function filter_Callback(hObject, eventdata, handles)
val=get(hObject,'Value');%获得选取项
%不同选项事件
switch valcase 1%对话框helpdlg('请选择需要使用的滤波器','Morphological Operations');case 2%均值滤波模板handles.num=1;handles.mb=fspecial('average',handles.mould);case 3handles.num=2;case 4%高斯滤波模板handles.num=3;handles.mb=fspecial('gaussian',[handles.mould,handles.mould],1);
end
guidata(hObject, handles);function ok1_Callback(hObject, eventdata, handles)
if handles.num==1%均值滤波器,255归一化handles.img3= filter2(handles.mb,handles.img3)/255; axes(handles.uppic); %在右边进阶图像中展示imshow(handles.img3);
end
if handles.num==2%中值滤波handles.img3= medfilt2(handles.img3,[handles.mould handles.mould]); axes(handles.uppic); %在右边进阶图像中展示imshow(handles.img3);
end
if handles.num==3handles.img3=filter2(handles.mb,handles.img3)/255;%用生成的高斯序列进行滤波axes(handles.uppic); %在右边进阶图像中展示imshow(handles.img3);
end
guidata(hObject, handles);

大多数功能都做完了,还剩硬币检测和提取红苹果。

前几天在准备线代考试,没有进度,今天继续。

判断图像是否已经灰度化的方法:

[m,n,l] = size(handles.img3);%检测图片的规格
if l == 3handles.img3 = rgb2gray(handles.img3);    %如果为彩色图 则转化为灰度图
elsehandles.img3=handles.img3;
end

红苹果检测老师给的代码要装一个什么工具箱,好麻烦,找一下有没有其他办法可以做。

硬币检测:

先做了硬币检测,单独写了一下。

基于Matlab实现硬币计数https://blog.csdn.net/qq_59343209/article/details/127927784?spm=1001.2014.3001.5501

红苹果提取:

用 matlab 对图像进行局部提取(颜色叠加)

看了一下这几个博客,重要的是要得到的就是二值化的分割出来的主体图像,剩下提取的步骤其实不算难。可以使用图像相乘,或者颜色叠加。

由于给定的图片主要分为红色的苹果和绿色的叶子部分,所以可以基于颜色进行分割。单独写了一篇。

MATLAB红苹果提取(颜色分割)https://blog.csdn.net/qq_59343209/article/details/127934269?spm=1001.2014.3001.5501

矩形和圆形检测:

数字图像处理-图像分割&形态学处理&圆与矩形检测

%通过分割,并基于形状特征实现圆和矩形的检测
pic=imread('shape.png');
gray_pic=rgb2gray(pic);
pic=1-im2bw(pic,0.74);  %灰度图转换成二值图像,直接进行灰度反转,让图形区域置1
for i=180:265pic(190,i)=1;
end
pic_fill=imfill(pic,'holes');            %填充洞
pic_fill=bwareaopen(pic_fill,10);        %删掉一些小块噪点
%bwboundaries是一个函数,可以用来获取二值图中对象的轮廓,包括外部轮廓与内部边缘。
[B,L]=bwboundaries(pic_fill,'noholes');     %Extent:各连通区域像素点与最小边界像素点比值
%regionprops度量图像区域属性
%boundingbox边框
%Centroid重心result=regionprops(pic_fill,'Extent','Centroid','boundingbox');
centroids = cat(1, result.Centroid);   %各连通区域质心
draw_rect=cat(1,result.BoundingBox);   %各连通区域最小边界矩形figure;
imshow(pic_fill);title('圆和矩形检测');
hold on;for i=1:size(result)
%y:黄色;k:黑色;w:白色;b:蓝色;g:绿色;r:红色;c:亮青色;m:锰紫色
%rectangle创建矩形,边缘颜色为黄色rectangle('position',draw_rect(i,:),'EdgeColor','y','LineWidth',2);  %绘出各连通区域最小边界矩形%text(x,y,txt),根据边界像素判断形状if result(i).Extent>0.95text(centroids(i,1)-20, centroids(i,2),'矩形','Color','b','FontSize',9);elseif result(i).Extent>0.76&&result(i).Extent<0.80text(centroids(i,1)-15, centroids(i,2)-5,'圆形','Color','b','FontSize',9);end
end
hold on;
%绘画图像边框
for j=1:length(B)boundary=B{j};plot(boundary(:,2),boundary(:,1),'r','LineWidth',2);
end
hold off;

照片动漫滤镜:

三行MATLAB实现动漫风格照片

要把一张照片变成动漫风格一共有三步,分别是

(1)双边滤波得到一张色块分离的图片 [后面详细介绍原理]

(2)边缘提取得到描线图

(3)合并步骤1,2中的结果

fi_img = imbilatfilt(img,100,20); %双边滤波
ed_img = 1-edge((rgb2gray(img)),'canny',[0.07,0.1]); %canny边缘提取
carton_img = fi_img.*(uint8(repmat(ed_img,[1,1,3]))); %合并

照片素描滤镜:

matlab素描算法实现

(1)原片载入,去色,反相

(2)滤波,处理RGB通道

(3)颜色取反,高斯模糊

(4)合并叠加得到图片

老照片风格:

调整图片的RGB通道参数

matlab实现PS算法之百叶窗、老照片

image=double(image);
image_old=image;
%分别调整图片的RGB值
image_old(:,:,1)=0.393*image(:,:,1)+0.769*image(:,:,2)+0.189*image(:,:,3);
image_old(:,:,2)=0.349*image(:,:,1)+0.686*image(:,:,2)+0.168*image(:,:,3);
image_old(:,:,3)=0.272*image(:,:,1)+0.534*image(:,:,2)+0.131*image(:,:,3);
handles.img2=image_old/255;

油画滤镜:

要获得类似绘画的效果,定义一个大小为 m × n 的小窗口矩阵。 将原始图像像素值复制到矩阵中,并找到每个值的直方图。 找到最大出现的像素值并将当前位置替换为最大出现值。

MATLAB仿PhotoShop油画/毛玻璃/漩涡/锥形等特效

美化GUI:

试了一下修改不是很好,还是算了

如何给GUI界面添加背景图片https://www.jianshu.com/p/314b43ec6546

MATLAB GUI高级界面美化https://zhuanlan.zhihu.com/p/40783980

Matlab大作业-基于GUI制作图像处理工具箱相关推荐

  1. 数字图像处理之matlab大作业:自制图像处理小工具

    学习的过程向来不是容易的,创造一个作品的过程更是不容易的.因此,在文章的最后,提供了两个现成的示例代码,大家直接可以拿来运行.在完成大作业的时候,大家可以在已有作品的基础上,按照自己的需求进行修改,添 ...

  2. 数字图像处理——大作业 基于车道信息的违法车辆车牌识别

    数字图像处理--大作业 基于车道信息的违法车辆车牌识别 一.车牌识别研究现状与分析 二.车牌识别算法原理 2.1 车牌定位 2.1.1 基于RGB阈值的车牌区域初定位 2.1.2 基于数学形态学的车牌 ...

  3. matlab求解多自由度振动系统,【2017年整理】1-《机械振动基础》大作业,基于matlab的多自由度振动.doc...

    [2017年整理]1-<机械振动基础>大作业,基于matlab的多自由度振动 <机械振动基础>大作业 (2016年春季学期) 题目多自由度振动系统的固有频率和固有阵型 姓 名学 ...

  4. 数字信号处理大作业——基于matlab R2019a的男声变女声资料汇总与代码

    @数字信号处理大作业--基于matlab R2019a的男声变女声资料汇总与代码 概述 参考了很多前人的资料,发现很多函数已经过时了,而且从我通过VIP下载的代码来看,代码的逻辑不是很清晰,废话也多, ...

  5. 用matlab实现女声变男声步骤,数字信号处理大作业——基于matlab R2019a的男声变女声资料汇总与代码...

    @数字信号处理大作业--基于matlab R2019a的男声变女声资料汇总与代码 概述 参考了很多前人的资料,发现很多函数已经过时了,而且从我通过VIP下载的代码来看,代码的逻辑不是很清晰,废话也多, ...

  6. 数字图像处理matlab作业,数字图像处理matlab大作业

    <数字图像处理matlab大作业>由会员分享,可在线阅读,更多相关<数字图像处理matlab大作业(23页珍藏版)>请在人人文库网上搜索. 1.几个图像处理实例,matlab ...

  7. 【数字图像处理】大作业 基于模式匹配的车牌识别

    大作业 基于模式匹配的车牌识别 1 课程设计任务 2 设计框图 3 准备工作 4 任务流程 4.1 图像预处理 4.2 图像分割 4.2.1 车牌定位 (1) 上下定界--水平扫描 (2) 左右定界- ...

  8. 嵌入式系统大作业——基于QT的3D模型展示

    嵌入式系统大作业--基于QT的3D模型展示 写在前面 实验设备 实现内容 实现过程 在win10上利用SolidWorks软件对模型进行预处理: 编写代码实现功能: 效果演示 参考资料 写在前面 该大 ...

  9. MATLAB大作业——美图秀秀

    基于APP Designer完成MATLAB大作业之简易版美图秀秀设计 目录​​​​​​​ 一.基础功能 二.添加效果 三.调色 四.美颜 五.贴图 六.相框 一.基础功能 1 导入图片 functi ...

最新文章

  1. 6-java代码片段
  2. 华北水利水电大学计算机研究生调剂,2018年华北水利水电大学硕士研究生相关专业接受调剂公告...
  3. 分子排列不同会导致_生物信息遇上Deep learning(7): ReLeaSE--强化学习做药物分子设计...
  4. 从流程上对rtmp协议经行总结
  5. python第五次作业——陈灵院
  6. ssh(struts,spring,hibernate)开发的初步集成01--依赖
  7. 如何让程序员变得没朋友
  8. linux设置windows共享为yum源
  9. angular.copy() 取消angular的数据双向绑定
  10. Java8 stream流分页(手动分页)
  11. 三菱GXWorks2 变换梯形图
  12. JSP项目进度管理系统myeclipse开发mysql数据库web结构java编程
  13. Unity Shader - 车漆效果(基于MatCap)
  14. 更新了pandas后,ix方法不能使用的替代办法
  15. 金山词霸2009牛津with SP3完全破解版(含全部本地词库和语音包)
  16. <Navigate>与useNavigate()
  17. NFT艺术品交易平台
  18. ElementUI项目使用pdf.js预览pdf文件
  19. Pyinstaller 详解多种打包过程(去坑,填坑)。
  20. twrp双清勾选哪两个_浅谈TWRP的作用

热门文章

  1. Python有趣的小程序 - 起名字的困扰
  2. java打印表,Java实现打印Excel工作表
  3. 通过tfidf求文本的关键字
  4. Robotics Toolbox
  5. 2018android 最新技术,2018年智能手机“新鲜事”,一起来看看,你的手机有这些新科技嘛...
  6. 创新的空气——尼古拉斯·尼葛洛庞帝/文
  7. 想请教下墓碑机制相关?
  8. 【XShell】XShell连接服务器中文乱码
  9. Linux系统:第十二章:AWS服务器X86架构安装配置Mysql与MongoDB
  10. 十六进制转八进制(完整代码)