实验一:基于GUI的图像文件读写操作

2023-10-20 18:30

本文主要是介绍实验一:基于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的图像文件读写操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/248921

相关文章

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

Golang GUI入门——andlabs ui

官方不提供gui标准库,只好寻求第三方库。 https://github.com/google/gxui 这个gui库是谷歌内部人员提供的,并不是谷歌官方出品,现在停止维护,只好作罢。 第三方gui库 找了好多,也比较了好多,最终决定使用的是还是 https://github.com/andlabs/ui 相信golang gui还会发展的更好,期待更优秀的gui库 由于andlabs

GUI编程08:画笔paint

本节内容视频链接:10、画笔paint_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1DJ411B75F?p=10&vd_source=b5775c3a4ea16a5306db9c7c1c1486b5 package com.yundait.lesson03;import java.awt.*;import java.awt.event.Wind

C++入门(06)安装QT并快速测试体验一个简单的C++GUI项目

文章目录 1. 清华镜像源下载2. 安装3. 开始菜单上的 QT 工具4. 打开 Qt Creator5. 简单的 GUI C++ 项目5.1 打开 Qt Creator 并创建新项目5.2 设计界面5.3 添加按钮的点击事件5.4 编译并运行项目 6. 信号和槽(Signals and Slots) 这里用到了C++类与对象的很多概念 1. 清华镜像源下载 https://

61.以太网数据回环实验(4)以太网数据收发器发送模块

(1)状态转移图: (2)IP数据包格式: (3)UDP数据包格式: (4)以太网发送模块代码: module udp_tx(input wire gmii_txc ,input wire reset_n ,input wire tx_start_en , //以太网开始发送信

LTspice模拟CCM和DCM模式的BUCK电路实验及参数计算

关于BUCK电路的原理可以参考硬件工程师炼成之路写的《 手撕Buck!Buck公式推导过程》.实验内容是将12V~5V的Buck电路仿真,要求纹波电压小于15mv. CCM和DCM的区别: CCM:在一个开关周期内,电感电流从不会到0. DCM:在开关周期内,电感电流总会到0. CCM模式Buck电路仿真: 在用LTspice模拟CCM电路时,MOS管驱动信号频率为100Khz,负载为10R(可自

HCIA--实验十:路由的递归特性

递归路由的理解 一、实验内容 1.需求/要求: 使用4台路由器,在AR1和AR4上分别配置一个LOOPBACK接口,根据路由的递归特性,写一系列的静态路由实现让1.1.1.1和4.4.4.4的双向通信。 二、实验过程 1.拓扑图: 2.步骤: (下列命令行可以直接复制在ensp) 1.如拓扑图所示,配置各路由器的基本信息: 各接口的ip地址及子网掩码,给AR1和AR4分别配置