因为最近在学习matlab的app designer以及图像的一些处理,因为网上对appdesigner的相关成品代码有点少,所以我就自己写了点代码来巩固自己的知识,代码可能有些复杂凌乱,因为刚写没多久。希望所写的对大家的学习能够有所帮助,大家一定要去网上去搜相关的原理再去看代码;

大体的模板形式如下:

其中主要的功能有模糊度,锐化,相对亮度,对比度,镜像旋转,水平可调角度旋转,按键返回上一步,按键保存改变的图片,按键显示新的图片,按键打开图片并在文本框里显示路径;其中改app有个缺点,就是无法像手机里相册那样调整了之后还可以还原之前的好几步,这个只能返回一步,如果有朋友能有想法去处理这个问题,希望朋友们能将想法发在评论区,共同进步。

首先简单的部分如背景颜色,标题将不再讲解,下面主要是讲一下各个控件的代码与功能,如有不对的地方,希望大家可以指出批评;

首先先建好模板,全局变量(全局变量有很大的作用无法忽视,original的作用是保存原图片,changed与upgrade的作用是保存改编的图片,last是用来保存上一步的图片):

open控件的功能是打开图片并显示在origina坐标区中,其代码如下:

模糊度控件的功能是添加动态的模糊(是matlab自带的函数),其代码如下:

锐化控件的功能是锐化图片,锐化是提取边缘特征,然后和原图片按比例进行重叠,其代码如下:

相对亮度控件的功能是提高亮度或降低亮度,代码如下:

对比度控件的功能就是改变对比度(对比度的原理就是亮暗的对比强度更大),其代码如下:

水平可调角度旋转的控件功能是将图片水平旋转,其代码如下:

镜面旋转控件的功能是将图片进行水平旋转与垂直旋转,其代码如下:

重置控件的功能是重新显示最开始图片,免去了打开去挑选图片步骤,用在修改图片无法满足要求时可以使用,其代码如下:

保存控件的功能时将app.UIAXES_2控件中显示的图片保存下来,其中有很多方法,我用的是拷贝窗口的方式,其代码如下:

返回上一步控件的功能是将返回上一步仅仅能返回一步,这是局限性最大的地方,希望大家可以一块想想解决方案,其代码如下:

所有控件的代码都在下方,如需文件的可私信;

​ properties (Access = private)originalpicture; % Descriptionupgradepicture;changedpicture;lastpicture;end% Callbacks that handle component eventsmethods (Access = private)% Code that executes after component creationfunction startupFcn(app)app.Lamp.Color='r';end% Button pushed function: openButtonfunction openButtonPushed(app, event)[filename,pathname]=uigetfile('*.jpg',"search picture");if isequal(pathname,'')||isequal(filename,'')msgbox("no picture",'warning','help');return;elseapp.Lamp.Color='g';path=strcat(pathname,filename);app.pathEditField.Value=path;app.originalpicture=imread(path);app.originalpicture=rgb2gray(app.originalpicture);  imshow(app.originalpicture,'Parent',app.UIAxes);app.changedpicture=app.originalpicture;endend% Value changing function: Sliderfunction SliderValueChanging(app, event)changingValue = event.Value;changingValue=double(changingValue);if isequal(app.originalpicture,'')msgbox("无图片",'warning','help');return;elseif isequal(app.changedpicture,'')app.lastpicture=app.upgradepicture;obscureway1=fspecial('motion',changingValue,changingValue);obscureway1=imfilter(app.originalpicture,obscureway1);app.upgradepicture=obscureway1;imshow(obscureway1,'Parent',app.UIAxes_2);app.changedpicture=app.upgradepicture;return;elseapp.lastpicture=app.upgradepicture;obscureway1=fspecial('motion',changingValue,changingValue);obscureway1=imfilter(app.changedpicture,obscureway1);app.upgradepicture=obscureway1;imshow(obscureway1,'Parent',app.UIAxes_2);app.changedpicture=app.upgradepicture;endend% Value changing function: Slider_2function Slider_2ValueChanging(app, event)changingValue = event.Value;changingValue=double(changingValue);  changingValue1=changingValue./100;if isequal(app.originalpicture,'')msgbox("无图片",'warning','help');return;elseif isequal(app.changedpicture,'')app.lastpicture=app.changedpicture;test = double(app.originalpicture); Gx = [-1 -2 -1;0 0 0;1 2 1]; x = filter2(Gx,test);Gy = [-1 0 1;-2 0 2;-1 0 1]; y = filter2(Gy,test);test1 = sqrt(x.^2 + y.^2);test2 = test + test1*changingValue1;imshow(uint8(test2),'Parent',app.UIAxes_2);app.changedpicture=uint8(tset2);   return;elseapp.lastpicture=app.changedpicture;test = double(app.changedpicture); Gx = [-1 -2 -1;0 0 0;1 2 1]; x = filter2(Gx,test);Gy = [-1 0 1;-2 0 2;-1 0 1]; y = filter2(Gy,test);test1 = sqrt(x.^2 + y.^2);test2 = test + test1*changingValue1;imshow(uint8(test2),'Parent',app.UIAxes_2);app.changedpicture=uint8(tset2);   return;endend% Value changed function: Spinnerfunction SpinnerValueChanged(app, event)value = app.Spinner.Value;if(value>100)app.Spinner.Value=0;value=0;msgbox('超出范围','warning','help');endif isequal(app.originalpicture,'')msgbox("无图片","warning",'help');return;elseif isequal(app.changedpicture,'')app.lastpicture=app.changedpicture;brightpicture=imadd(app.originalpicture,value);imshow(brightpicture,'Parent',app.UIAxes_2);app.changedpicture=brightpicture;elseapp.lastpicture=app.changedpicture;brightpicture=imadd(app.changedpicture,value);imshow(brightpicture,'Parent',app.UIAxes_2);app.changedpicture=brightpicture; endend% Value changing function: Spinner_2function Spinner_2ValueChanging(app, event)changingValue = event.Value;changingValue=double(changingValue);changingValue=changingValue./100;if(changingValue>=0.5||changingValue<0)app.Spinner_2.Value=0;changingValue=0;msgbox('超出范围','warning','help');endif isequal(app.originalpicture,'')msgbox("无图片","warning",'help');return;elseif isequal(app.changedpicture,'')app.lastpicture=app.changedpicture;contrastpicture=imadjust(app.originalpicture,[changingValue,1-changingValue],[]);imshow(contrastpicture,'Parent',app.UIAxes_2);app.changedpicture=contrastpicture;return;elseapp.lastpicture=app.changedpicture;contrastpicture=imadjust(app.changedpicture,[changingValue,1-changingValue],[]);imshow(contrastpicture,'Parent',app.UIAxes_2);app.changedpicture=contrastpicture;return;endend% Button pushed function: saveButtonfunction saveButtonPushed(app, event)savepicture=figure('Visible','off');copyobj(app.UIAxes_2,savepicture);set(gca,'Units','normalized','Position',[0.2 0.2 0.8 0.8]);saveas(savepicture,'nb.jpg');end% Button pushed function: newButtonfunction newButtonPushed(app, event)if isequal(app.originalpicture,'')msgbox("无图片",'warning','help');elseimshow(app.originalpicture,'Parent',app.UIAxes_2);endend% Button pushed function: lastactionButtonfunction lastactionButtonPushed(app, event)if isequal(app.lastpicture,'')msgbox('无上一步','warning','help');elseimshow(app.lastpicture,'Parent',app.UIAxes_2);endend% Value changed function: mirrorKnobfunction mirrorKnobValueChanged(app, event)value = app.mirrorKnob.Value;app.lastpicture=app.changedpicture;if isequal(value,'x镜面')mirrorpicture=flip(app.changedpicture,1);imshow(mirrorpicture,'Parent',app.UIAxes_2);app.changedpicture=mirrorpicture;elseif isequal(value,'y镜面')mirrorpicture=flip(app.changedpicture,2);imshow(mirrorpicture,'Parent',app.UIAxes_2);app.changedpicture=mirrorpicture;endend% Value changing function: levelangleKnobfunction levelangleKnobValueChanging(app, event)changingValue = event.Value;changingValue=double(changingValue);app.lastpicture=app.changedpicture;anglepicture=imrotate(app.changedpicture,changingValue);imshow(anglepicture,'Parent',app.UIAxes_2);app.changedpicture=anglepicture;endend

使用Matlab的appdesigner创建一个简单的图像处理app相关推荐

  1. iWatch 开发 2:创建一个简单的Apple watch应用

    在上篇文章中,我系统的介绍了一下 iWatch 的功能,相信大家对iWatch开发 也有了一个系统的认识. 今天这篇文章来跟大家说下如何创建一个简单的 iWatch app. 使用 Xcode 创建 ...

  2. 创建一个简单的存储过程(RroGetA_Z),要求输出A到Z之间的26个大写字母

    <SQL Server数据库设计与项目实践> ISBN:978-7-302-40610-5 p121 动手实践-实训内容-(1) (1)创建一个简单的存储过程(RroGetA_Z),要求输 ...

  3. Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏

    Unity 2D游戏开发快速入门第1章创建一个简单的2D游戏 即使是现在,很多初学游戏开发的同学,在谈到Unity的时候,依然会认为Unity只能用于制作3D游戏的.实际上,Unity在2013年发布 ...

  4. Linux Namespace系列(09):利用Namespace创建一个简单可用的容器

    本文将演示如何利用namespace创建一个完整的容器,并在里面运行busybox.如果对namespace不是很熟悉,请先参考前面几遍介绍不同类型namespace的文章. busybox是一个Li ...

  5. Windows下编译TensorFlow1.3 C++ library及创建一个简单的TensorFlow C++程序

    参考:https://www.cnblogs.com/jliangqiu2016/p/7642471.html Windows下编译TensorFlow1.3 C++ library及创建一个简单的T ...

  6. WF4.0入门系列1——创建一个简单的工作流

    WF4.0入门系列1--创建一个简单的工作流 打开VS2010,选择文件-新建-项目,选择Workflow项 工作流台应用程序,在名称处输入chapter01,选择合适的位置,这里默认,单击确定. V ...

  7. visjs使用小记-1.创建一个简单的网络拓扑图

    1.插件官网:http://visjs.org/  2.创建一个简单的网络拓扑图 <!doctype html> <html> <head><title> ...

  8. idea建立一个java工程_IntelliJ IDEA(三、各种工程的创建 -- 之一 -- 创建一个简单的Java工程)...

    一.创建一个简单的Java工程:HelloWorld 1. Eclipse的第一步是选择工作空间,然后创建项目: IDEA不同(没有工作空间的概念),第一步就直接创建具体的项目,项目创建过程中会选择在 ...

  9. 使用timer控件创建一个简单的报警程序

    简介: 当我使用计算机工作时,我总是如此的专心致志,以至于每当我过了"一会儿"去看时间时,发现已经过了三个小时,而我却完全没有意识到!所以我决定使用我从Code Project学来 ...

最新文章

  1. acl中in和out的区别
  2. cuda合并访问的要求_在 CUDA C / C ++ 中使用共享内存
  3. 第十届蓝桥杯java B组—试题B 不同子串
  4. adb.exe可能被其他程序关闭_木工中央除尘设备系统正式运行的操作程序
  5. Redis五种数据结构
  6. android一些小技巧
  7. java 大流量高并发_【BAT面试题】如何应对大流量、高并发??
  8. ubuntu 下源码安装wireshark
  9. mini_magick上传图片
  10. python 安装第三方库/包(命令/详细注释),如安装pyinstaller库
  11. python可以手眼定标吗_手眼标定 相关实例(示例源码)下载 - 好例子网
  12. 极域电子教室卸载或安装软件后windows7无法启用触摸板、键盘
  13. JS常见的兼容性问题汇总
  14. android expandablerecycle 动画,Android Expandable RecyclerView不同卡高
  15. 苹果电脑访问文件共享服务器,mac电脑肿么访问mac共享的文件
  16. win7与internet时间同步出错_Win7电脑时间同步出错怎么办?Win7电脑时间同步出错的解决方法...
  17. 银行等额本息还款算法
  18. python实战(一)Python爬取猫眼评分排行前100电影及简单数据分析可视化python实战(一)Python爬取猫眼排行前一百电影及简单数据分析可视化
  19. 什么是SEM?SEM是否包括SEO?
  20. ItextPdf给PDF批量插入图片

热门文章

  1. (PTA)数据结构(作业)4、链表
  2. 对“主数据”的一点吐槽
  3. double和float区别
  4. ruby on rais3 入门——环境搭建详细步骤(windows下)
  5. 如何使用标贝开放平台的语音识别、语音合成等服务
  6. For菜鸟文章:PE文件格式,qduwg翻译
  7. lua table是否为空的判断
  8. python3爬虫讲座ppt+demo
  9. [论文解读] A Ranking-based, Balanced Loss Function Unifying Classification and Localisation in Object De
  10. 软件功能测试概论(课堂练习1)