通过上一章节的学习相信大家已经掌握了一些小的技巧
在看本章节之前你应该掌握以下技能
给按钮添加回调函数
修改axes框和按钮的属性,包括tag属性和string属性
你要可以打开gui编程的界面
如果不会以上技能的童鞋请看上一章节的内容
https://blog.csdn.net/gjggj/article/details/79115121
现在正式实现这个项目:
首先拖出一个下图的界面:
第一个axses框的tag属性改为before第二个axses框的属性改为after
去噪按钮的string属性改为“去噪”,tag属性改为load
下一张按钮的string属性改为“下一个”,tag属性改为next
上一张按钮的string属性改为“上一个”,tag属性改为prev
第二步
在matlab保存脚本的文件夹,一般是bin目录里新建两个空文件夹,分别是new和old;
程序运行结束后new保存了去噪后的视频和每一帧的图像,old保存了去噪后的视频和每一帧的图像
第三步
相应的按钮添加回调函数如下:
去噪按钮的回调函数
function load_Callback(hObject, eventdata, handles) % hObject handle to load (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [filename,pathname]=uigetfile({\'*.*\';\'*.avi\';\'*.mp4\';\'*.flv\';},\'选择视频\'); %将im定义成全局变量,这样在代码的任何位置都可以使用im了。 %如果没有输入路径,则弹出错误对话框 if isequal(filename,0)||isequal(pathname,0) errordlg(\'您还没有选择视频!!\',\'程序员哥哥告诉你\'); return; else %合成路径+文件名 global PA; global im; path=[pathname,filename]; PA=path; %读取图像 videoRead = VideoReader(PA); %打开坐标,方便操作 nFrameRead = videoRead.NumberOfFrames;% 帧的总数 for i = 1 : nFrameRead; %对每帧图像做空间域滤波处理 %命名 jpg默认为YCbCr通道 strtemp = strcat(\'old//F_new\',int2str(i),\'.\',\'jpg\'); F_new = read(videoRead,i); % F_new=medfilt2(F) imwrite(F_new,strtemp,\'JPG\'); % 将图片序列保存为图片文件 end videoRead = VideoReader(path); %打开坐标,方便操作 nFrameRead = videoRead.NumberOfFrames;% 帧的总数 for i = 1 : nFrameRead; %对每帧图像做空间域滤波处理 %命名 jpg默认为YCbCr通道 strtemp = strcat(\'new//F_new\',int2str(i),\'.\',\'jpg\'); F = read(videoRead,i); % F_new=medfilt2(F) % F_new = imnoise(F,\'speckle\',0.1); %给图像加入噪声 0.4为可以修改的参数 Y = F(:,:,1); %获得图像的三个通道的灰度值 Cb = F(:,:,2); Cr = F(:,:,3); F_Y=medfilt2(Y,[3 3]); %对图像进行中值滤波处理 F_Cb=medfilt2(Cb,[3 3]); F_Cr=medfilt2(Cr,[3 3]); F_new = cat(3,F_Y,F_Cb,F_Cr); %将三个通道联结在一起 cat函数 imwrite(F_new,strtemp,\'JPG\'); % 将图片序列保存为图片文件 end end myobj = VideoWriter(\'new//result.avi\'); % 新建一个视频文件 myobj.FrameRate =25; % 定义每秒的帧数 open(myobj); % 打开视频文件 for i = 1:nFrameRead; % 将图像重新生成视频文件 fname = strcat(\'new//F_new\',num2str(i),\'.jpg\'); im = imread(fname); writeVideo(myobj,im); end下一个按钮的回调函数:
function next_Callback(hObject, eventdata, handles) % hObject handle to next (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) persistent j; if isempty(j) j=0; end global i; i=j; j=j+2; fname = strcat(\'old//F_new\',num2str(j),\'.jpg\'); im = imread(fname); set(handles.before,\'HandleVisibility\',\'ON\'); %使用图像,操作在坐标before里 axes(handles.before); %在坐标图before里显示原图像 imshow(im); fname = strcat(\'new//F_new\',num2str(j),\'.jpg\'); af = imread(fname); set(handles.after,\'HandleVisibility\',\'ON\'); %使用图像,操作在坐标before里 axes(handles.after); %在坐标图before里显示原图像 imshow(af);