本文主要是介绍实验一:基于GUI的图像文件读写操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、实验目的及要求:
二、实验预习部分
三、实验内容及步骤
数字图像处理完整MATLAB代码在我的资源可以看到,为方便下载,下面是百度网盘资源:
链接:https://pan.baidu.com/s/17S7PZJwwvb3PFMFVxqEY5w
提取码:HUAT
一、实验目的及要求:
1.熟悉MATLAB环境,能够建立一个图像处理系统的GUI界面。
2.掌握如何打开一幅常见位图文件,明确MATLAB中能够处理哪些位图文件。
3.掌握如何在MATLAB中保存一幅位图文件,另存为其他格式的文件,掌握图像文件之间的相互转化方法。
4.在MATLAB进行系统的打印,退出,帮助等操作。
5.掌握如何利用MATLAB来获取位图文件的大小、颜色、高度、宽度等相关信息。
二、实验预习部分
1. 熟悉MATLAB环境,学习以下内容。
1.1 《MATLAB图形用户界面设计》文件中至少学习“图形用户界面设计工具的启动”部分的内容,“图形用户界面设计窗口”部分的“菜单编辑器部分”部分内容,“对话框设计”部分的“文件打开对话框”、“文件保存对话框”、“打印设置对话框”、“打印预览对话框”、“打印对话框”部分。可以建立一个基于菜单的GUI界面或者菜单与控件共存的GUI界面。
1.2 《Matlab图像处理教程简易教程》中学习 “图像的读取和显示”部分所列的四个内容。
2.学习并记录下列matlab命令的功能及用法
1)imread()
功能:用于读取图片文件中的数据
用法:A = imread(filename,fmt)
2)imshow()
功能:显示图像的函数
用法:imshow(I,n)
3) whos()
功能:用于列出当前工作空间中所有变量,以及它们的名字、尺寸(比如一个矩阵或数组的行列维数)、所占字节数、属性等信息。这些信息都显示在matlab中的workspace窗口中。
用法:whos(variable_list)
4) imfinfo()
功能:在图像处理中,该函数用于获取一张图片的具体信息。这些具体信息包括图片的格式、尺寸、颜色数量、修改时间等等
用法:info = imfinfo(filename,fmt)
5) imwrite()
功能:用于将图像数据写入到图像文件中, 存储在磁盘上
用法:imwrite(A,filename,fmt)
6)im2bw()
功能:使用阈值(threshold)变换法把灰度图像(grayscale image)转换成二值图像
用法:BW = im2bw(I, level)
三、实验内容及步骤
1.创建一个基于菜单或者菜单与控件共存的GUI界面,命名为:数字图像处理实验_班级_姓名。界面中除了必需的菜单项之外,可以添加功能控件,背景颜色,背景音乐等个性化的选项,运行创建好的界面结果。
此处的代码较多,上传较为复杂,暂不打算开放,需要运行结果图可以私信我。
2. 文件格式转化
1)打开一幅图像(如1.jpg),存入一个数组中;
2)显示图像如下;
%注意,你需要先下载一张你喜欢的图片
close all; %关闭当前所有图形窗口
clear all; %清空工作空间变量
clc; %清屏
[filename, pathname] = uigetfile( ...
{'*.bmp;*.jpg;*.png;*.jpeg', 'Image Files (*.bmp, *.jpg, *.png,*.jpeg)'; ...
'*.*', 'All Files (*.*)'}, ...
'Pick an image');
if isequal(filename,0) || isequal(pathname,0)
return;
end
fpath=[pathname filename];
img_src=imread(fpath);
whos img_src;
imshow(img_src);
3)用whos 命令提取该读入图像的基本信息,并记录:
图像基本信息:
%此处代码同上,只是操作不同
close all; %关闭当前所有图形窗口
clear all; %清空工作空间变量
clc; %清屏
[filename, pathname] = uigetfile( ...
{'*.bmp;*.jpg;*.png;*.jpeg', 'Image Files (*.bmp, *.jpg, *.png,*.jpeg)'; ...
'*.*', 'All Files (*.*)'}, ...
'Pick an image');
if isequal(filename,0) || isequal(pathname,0)
return;
end
fpath=[pathname filename];
img_src=imread(fpath);
whos img_src;
imshow(img_src);
4)用imwrite()函数将最初读入的jpg图像另存为一幅bmp图像,设为2.bmp。
close all; %关闭当前所有图形窗口
clear all; %清空工作空间变量
clc; %清屏
[filename, pathname] = uigetfile( ...
{'*.bmp;*.jpg;*.png;*.jpeg', 'Image Files (*.bmp, *.jpg, *.png,*.jpeg)'; ...
'*.*', 'All Files (*.*)'}, ...
'Pick an image');
if isequal(filename,0) || isequal(pathname,0)
return;
end
fpath=[pathname filename];
img_src=imread(fpath);
imwrite(img_src,'C:\Users\A\Desktop\picture\2.bmp');
imwrite(img_src,'C:\Users\A\Desktop\picture\3.tif');
%注意上面的imwrite中的地址是保存图片的地址,你需要根据你自己的需要修改这个路径(也就是你想把这张照片保存的地址)
5)用imwrite()函数将图像另存为一幅tif图像,设为3.tif。
6)分别读入三幅图像:1.jpg、 2.bmp和3.tif;
%注意imread里的路径需要根据你的需要进行修改
close all; %关闭当前所有图形窗口
clear all; %清空工作空间变量
clc; %清屏
img_src1=imread('C:\Users\A\Desktop\picture\1.jpg');
img_src2=imread('C:\Users\A\Desktop\picture\2.bmp');
img_src3=imread('C:\Users\A\Desktop\picture\3.tif');
subplot(221),imshow(img_src1);
subplot(222),imshow(img_src2);
subplot(223),imshow(img_src3);
7)用imfinfo 命令提取该读入图像1.jpg、2.bmp和3.tif的基本信息,并记录:
1.jpg文件信息 : 2.bmp文件信息 3.tif文件信息
%同样注意路径问题
close all; %关闭当前所有图形窗口
clear all; %清空工作空间变量
clc; %清屏
info1=imfinfo('C:\Users\A\Desktop\picture\1.jpg');
info2=imfinfo('C:\Users\A\Desktop\picture\2.bmp');
info3=imfinfo('C:\Users\A\Desktop\picture\3.tif');
9)比较三幅图像jpg文件、bmp文件和tif文件的大小,比较并解释文件大小不同的原因
文件类型 | bmp文件 | jpg文件 | tif文件 |
文件大小 | 360054 | 21813 | 297670 |
3种文件大小不同的原因:
JPEG文件用有损压缩方式去除冗余的图像和彩色数据;tif是一种压缩图片格式,但是压缩比很低,所以和bmp并差不了多少;bmp格式,标准的位图格式,完全不压缩,体积极大。因此,对于同一图片的不同格式文件大小顺序为:JPEG<tif<bmp
10)同时将1.jpg ,2.bmp,和3.tif显示出来,观察几幅图像有无差异,若有请分析差异原因。
2.Bmp、3.tif两幅图片差异不大,因为这两种格式储存图片的保真度都很大,而1.jpg图片的失真度较大,这与三种格式储存图片数据的方法有关。
3.图像特征分析
1)读取一幅彩色图像存为img,分别用以下两种方法来获取单色图像;
a用函数rgb2gray(img)将其转换为灰度图像;显示该灰度图象;
b用r=img(:,:,1)或g=img(:,:,2)或b=img(:,:,3)可以获取彩色图像的红、绿、蓝单色图像,为便于分析可以根据实际的图选择用哪个单色图像;并显示得到的单色图像;
%注意路径问题!!!重要的事情说三遍!!!
close all; %关闭当前所有图形窗口
clear all; %清空工作空间变量
clc; %清屏
img=imread("C:\Users\A\Desktop\picture\1.jpg");
gray=rgb2gray(img);
r=img(:,:,1);
g=img(:,:,2);
b=img(:,:,3);
subplot(221),imshow(gray);
subplot(222),imshow(r);
subplot(223),imshow(g);
subplot(224),imshow(b);
2) 用imhist()函数分别显示灰度图像的直方图和一幅单色图像的直方图,观察直方图,找出图像分割的位置点;
%注意路径问题!!!重要的事情说三遍!!!
close all; %关闭当前所有图形窗口
clear all; %清空工作空间变量
clc; %清屏
img=imread("C:\Users\A\Desktop\picture\1.jpg");
gray=rgb2gray(img);
r=img(:,:,1);
% g=img(:,:,2);
% b=img(:,:,3);
subplot(221),imshow(gray);
subplot(222),imshow(r);
% subplot(223),imshow(g);
% subplot(224),imshow(b);
subplot(223),imhist(gray);
subplot(224),imhist(r);
% subplot(221),imhist(g);
% subplot(222),imhist(b);
3)设定两个不同的阈值,用im2bw将一幅灰度图像转化为二值图像,显示不同阈值二值化后的图像;
%注意路径问题
close all; %关闭当前所有图形窗口
clear all; %清空工作空间变量
clc; %清屏
img=imread("C:\Users\A\Desktop\picture\1.jpg");
gray=rgb2gray(img);
bw1=im2bw(gray,0.3);
bw2=im2bw(gray,0.8);
subplot(221),imshow(bw1);
subplot(222),imshow(bw2);
4.记录上述每一步的函数执行语句,写入实验报告。
这篇关于实验一:基于GUI的图像文件读写操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!