《数字图像处理与机器视觉——Visual C++与Matlab实现》——1.4 读取和写入图像文件

简介:

本节书摘来自异步社区出版社《数字图像处理与机器视觉——Visual C++与Matlab实现》一书中的第1章,第1.4节,作者: 张铮 , 王艳平 , 薛桂香,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.4 读取和写入图像文件

数字图像处理与机器视觉——Visual C++与Matlab实现
Matlab可以处理以下的图像文件类型:BMP、HDF、JPEG、PCX、TIFF、XWD、ICO、GIF、CUR。可以使用imread和imwrite函数对图像文件进行读写操作,使用imfinfo函数来获得数字图像的相关信息。

1.imread函数
imread函数可以将指定位置的图像文件读入工作区。对于除索引图像以外的情况,其原型为:

A = imread(FILENAME, FMT);

参数说明:

FILENAME指定图像文件的完整路径和文件名。如果要读入的文件在当前工作目录中或者自动搜索列表中给出的路径下,则只需提供文件名。
FMT参数指定图像文件的格式所对应的标准扩展名,例如GIF等。如果imread没有找到FILENAME所指定的文件,它会尝试FILENAME.FMT。
返回值:

A是一个包含图像数据的矩阵。对于灰度图,它是一个m行n列的矩阵;对于RGB真彩图,则是一个m×n×3的矩阵。对于大多数图像文件,A的类型为uint8;而对于某些TIFF和PNG图像,A的类型为uint16。
对于索引图像,情况有所不同,此时IMREAD的调用形式为:

[X, MAP] = imread(FILENAME, FMT);

此时的返回值中,X为图像数据矩阵,MAP则是颜色索引表。图像中的颜色索引数据会被归一化到0到1的范围内。因为,对于索引图像,不论图像文件本身使用何种数据类型,imread函数都会使用双精度类型存储图像数据。

imread函数还可以处理RGBA等格式存储的图像,可以通过在命令窗口中输入help imread来查看Matlab中有关imread的在线帮助信息。

2.IMWRITE函数
imwrite函数用于将指定的图像数据写入文件中,通过指定不同的保存文件扩展名,起到图像格式转换的作用(参见例2.4)。其调用格式为:

imwrite(A, FILENAME, FMT);

参数说明:

FILENAME参数指定文件名(不必包含扩展名)。
FMT参数指定保存文件所采用的格式。
存储索引图像时,还需要一并存储颜色索引表,则此时IMWRITE函数的使用方法应为:

imwrite(A, MAP, FILENAME, FMT);

MAP是合法的Matlab颜色索引表。

imwrite函数还可以控制图像文件的很多属性,如TIFF文件格式所选择的彩色空间、GIF格式中的透明色以及图像文件的作者、版权信息、解析度和创建软件等。

【例1.4】 读入一幅tif图像文件,并在写入磁盘时将tif图像转换为bmp图像。

>>I=imread('pout.tif'); %读入图像
>>whos I %查看图像变量信息
 Name   Size          Bytes Class
 I    291x240          69840 uint8 array
Grand total is 69840 elements using 69840 bytes
%通过whos命令可以看到读入的高为291、宽为240的灰度图像I就是一个291*240的二维矩阵


>>imwrite(I, 'pout.bmp'); %将图像写入文件pout.bmp,同时起到了转换文件类型的作用

3.imfinfo函数
imfinfo函数可以读取图像文件中的某些属性信息(参见例12.5),比如修改日期、大小、格式、高度、宽度、色深、颜色空间、存储方式等。其调用格式为:

imfinfo(FILENAME, FMT);

参数说明:

FILENAME参数指定文件名。
FMT参数是可选参数,用于指定文件格式。
【例1.5】 查看图像文件信息。

>>imfinfo('wolf.jpg') %查看图像文件信息
ans = 
      Filename: 'wolf.jpg'
     FileModDate: '16-十一月-2007 23:41:31'
      FileSize: 64213
       Format: 'jpg'
    FormatVersion: ''
        Width: 1024
       Height: 768
      BitDepth: 24
      ColorType: 'truecolor'
   FormatSignature: ''
   NumberOfSamples: 3
    CodingMethod: 'Huffman'
    CodingProcess: 'Progressive'
       Comment: {}
     Orientation: 1
     XResolution: 72
     YResolution: 72
   ResolutionUnit: 'Inch'
      Software: 'Adobe Photoshop 7.0 '
      DateTime: '2005:08:01 11:42:18 '
  YCbCrPositioning: 'Centered'
    DigitalCamera: [1x1 struct]

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
1月前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
2月前
|
算法 数据安全/隐私保护 计算机视觉
基于Retinex算法的图像去雾matlab仿真
本项目展示了基于Retinex算法的图像去雾技术。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释和操作步骤视频。Retinex理论由Edwin Land提出,旨在分离图像的光照和反射分量,增强图像对比度、颜色和细节,尤其在雾天条件下表现优异,有效解决图像去雾问题。
|
24天前
|
算法 数据安全/隐私保护
基于信息论的高动态范围图像评价算法matlab仿真
本项目基于信息论开发了一种高动态范围(HDR)图像评价算法,并通过MATLAB 2022A进行仿真。该算法利用自然图像的概率模型,研究图像熵与成像动态范围的关系,提出了理想成像动态范围的计算公式。核心程序实现了图像裁剪处理、熵计算等功能,展示了图像熵与动态范围之间的关系。测试结果显示,在[μ-3σ, μ+3σ]区间内图像熵趋于稳定,表明系统动态范围足以对景物成像。此外,还探讨了HDR图像亮度和对比度对图像质量的影响,为HDR图像评价提供了理论基础。
|
27天前
|
传感器 算法 算法框架/工具
基于一阶梯度的图像亚像素位移matlab仿真,带GUI界面
本项目提供图像亚像素位移估计算法,使用Matlab2022a开发。完整程序无水印运行效果佳,附带详细中文注释代码和操作视频。该算法通过一阶梯度信息和泰勒级数展开,实现比像素更精细的位置变化测量,广泛应用于医学影像、遥感图像、视频监控、精密测量等领域,显著提升图像配准和分析精度。
|
1月前
|
传感器 算法 数据安全/隐私保护
基于Affine-Sift算法的图像配准matlab仿真
本项目展示了Affine-SIFT算法的运行效果(无水印),适用于图像配准任务,能够处理旋转、缩放、平移及仿射变换。程序基于MATLAB2022A开发,包含完整代码与操作视频。核心步骤为:先用SIFT提取特征点,再通过仿射变换实现高精度对准。
|
22天前
|
监控 算法 自动驾驶
基于图像形态学处理的移动物体目标跟踪和质心提取matlab仿真,带GUI界面
本项目展示了一种基于图像形态学处理的移动物体目标跟踪和质心提取算法。完整程序运行效果无水印,使用Matlab2022a开发。核心代码包含详细中文注释及操作视频。算法通过多帧图像像素值求平均、中值法或高斯混合模型估计背景,结合形态学处理(开闭运算、阈值处理)去除噪声并优化目标检测,提高准确性。颜色直方图匹配用于目标跟踪,结构元素膨胀操作扩大搜索范围,增强鲁棒性。
|
2月前
|
算法 人机交互 数据安全/隐私保护
基于图像形态学处理和凸包分析法的指尖检测matlab仿真
本项目基于Matlab2022a实现手势识别中的指尖检测算法。测试样本展示无水印运行效果,完整代码含中文注释及操作视频。算法通过图像形态学处理和凸包检测(如Graham扫描法)来确定指尖位置,但对背景复杂度敏感,需调整参数PARA1和PARA2以优化不同手型的检测精度。
|
2月前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
5月前
|
Linux C++
Linux c/c++文件的基本操作
在Linux环境下使用C/C++进行文件的基本操作,包括文件的创建、写入、读取、关闭以及文件描述符的定位。
61 0
Linux c/c++文件的基本操作
|
5月前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
122 0

热门文章

最新文章