《数字图像处理与机器视觉——Visual C++与Matlab实现(第2版)》——2.1.4 读取和写入图像文件

简介:

本节书摘来自异步社区出版社《Visual C++ 2012 开发权威指南》一书中的第2章,第2.4节,作者: 张铮 , 徐超 , 任淑霞 , 韩海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.1.4 读取和写入图像文件

数字图像处理与机器视觉——Visual C++与Matlab实现(第2版)
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()将指定的图像数据写入文件中,通过指定不同的保存文件扩展名,可以起到图像格式转换的作用(参见例1.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'); %读入图像
>>whosI %查看图像变量信息
  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,同时起到了转换文件类型的作用```
例1.4中的功能已经被封装在金羽图书论坛(http://bbs.book95.com) 的“金羽图书与答疑”板块与本书同名的主题帖子附件中的“Chapter1/Code”目录下的“ex1_4.m”文件内。

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

`imfinfo(FILENAME, FMT);`
FILENAME参数指定文件名;

FMT参数是可选参数,指定文件格式。

【例1.5】查看图像文件信息。

imfinfo('pout.tjf') %查看图像文件信息
ans =Filename: 'F:Program FilesMATLABRtoolboximagesimdemospout.tif'

              FileModDate: '04-十二月-2000 13:57:50'
                 FileSize: 69004
                   Format: 'tif'
            FormatVersion: []
                    Width: 240
                   Height: 291
                 BitDepth: 8
                ColorType: 'grayscale'
          FormatSignature: [73 73 42 0]
                ByteOrder: 'little-endian'
           NewSubFileType: 0
            BitsPerSample: 8
              Compression: 'PackBits'
PhotometricInterpretation: 'BlackIsZero'
             StripOffsets: [9x1 double]
          SamplesPerPixel: 1
             RowsPerStrip: 34
          StripByteCounts: [9x1 double]
              XResolution: 72
              YResolution: 72
           ResolutionUnit: 'None'
                 Colormap: []
      PlanarConfiguration: 'Chunky'
                TileWidth: []
               TileLength: []
              TileOffsets: []
           TileByteCounts: []
              Orientation: 1
                FillOrder: 1
         GrayResponseUnit: 0.0100
           MaxSampleValue: 255
           MinSampleValue: 0
             Thresholding: 1
                   Offset: 68754```
相关文章
|
1月前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。
|
2月前
|
Serverless 编译器 C++
【C++面向对象——类的多态性与虚函数】计算图像面积(头歌实践教学平台习题)【合集】
本任务要求设计一个矩形类、圆形类和图形基类,计算并输出相应图形面积。相关知识点包括纯虚函数和抽象类的使用。 **目录:** - 任务描述 - 相关知识 - 纯虚函数 - 特点 - 使用场景 - 作用 - 注意事项 - 相关概念对比 - 抽象类的使用 - 定义与概念 - 使用场景 - 编程要求 - 测试说明 - 通关代码 - 测试结果 **任务概述:** 1. **图形基类(Shape)**:包含纯虚函数 `void PrintArea()`。 2. **矩形类(Rectangle)**:继承 Shape 类,重写 `Print
59 4
|
7月前
|
JSON 数据格式 Python
【2023最新】Matlab 保存JSON数据集文件,并用Python读取
本文介绍了如何使用MATLAB生成包含数据和标签的JSON格式数据集文件,并展示了用Python读取该JSON文件作为训练集的方法。
227 1
|
2月前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
5月前
|
Linux C++
Linux c/c++文件的基本操作
在Linux环境下使用C/C++进行文件的基本操作,包括文件的创建、写入、读取、关闭以及文件描述符的定位。
58 0
Linux c/c++文件的基本操作
|
6月前
|
C++ 内存技术
[转]Visual C++内嵌swf文件并播放
[转]Visual C++内嵌swf文件并播放
|
5月前
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
118 0
|
5月前
|
Linux C++
Linux c/c++文件移动
这篇文章介绍了在Linux环境下,使用C/C++语言通过命令方式和文件操作方式实现文件移动的方法。
151 0
|
6月前
|
Linux API C++
超级好用的C++实用库之文件目录操作
超级好用的C++实用库之文件目录操作
77 0
|
7月前
Matlab批量修改指定文件下文件名
Matlab批量修改指定文件下文件名
273 1