主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

imread

从图形文件读取图像

说明

A = imread(filename)filename 指定的文件读取图像,并从文件内容推断出其格式。如果 filename 为多图像文件,则 imread 读取该文件中的第一个图像。

示例

A = imread(filename,fmt) 另外还指定具有 fmt 指示的标准文件扩展名的文件的格式。如果 imread 找不到具有 filename 指定的名称的文件,则会查找名为 filename.fmt 的文件。

A = imread(___,idx) 从多图像文件读取指定的图像。此语法仅适用于 CUR、GIF、HDF4、ICO、PBM、PGM、PPM、SVS 和 TIFF 文件。您必须指定 filename 输入,也可以指定 fmt

A = imread(___,Name=Value) 支持上述语法中的任何输入参量组合,且可使用一个或多个名称-值参量指定格式特定的选项。例如,要自动定向 JPEG 图像,请将 AutoOrient 设置为 true (自 R2024b 起)

示例

[A,map] = imread(___)filename 中的索引图像读入 A,并将图像的关联颜色图读入 map。图像文件中的颜色图值会自动重新调整到范围 [0, 1] 中。此语法不适用于 HEIF 和 HEIC 图像文件,因为这些文件格式不支持颜色图。

示例

[A,map,transparency] = imread(___) 另外还返回图像透明度。此语法仅适用于 PNG、CUR 和 ICO 文件。对于 PNG 文件,如果存在 alpha 通道,transparency 会返回该 alpha 通道。对于 CUR 和 ICO 文件,transparency 为 AND(不透明度)掩码。

示例

示例

全部折叠

读取示例图。

A = imread("ngc6543a.jpg");

imread 函数返回一个类型为 uint8 的 650×600×3 数组。

显示图像。

image(A)

Figure contains an axes object. The axes object contains an object of type image.

读取示例索引图像文件中的第一个图像。

[A,map] = imread("corn.tif");
whos A map
  Name        Size              Bytes  Class     Attributes

  A         415x312            129480  uint8               
  map       256x3                6144  double              

索引图像 A 是一个类型为 uint8 的 415×312 矩阵,颜色图 map 是一个类型为 double 的 256×3 矩阵。map 的维度表示索引图像包含多达 256 种颜色。

显示图像。

imshow(A,map)

Figure contains an axes object. The hidden axes object contains an object of type image.

将索引图像转换为 RGB 图像。结果为一个 double 类型的 415×312×3 数组。

RGB = ind2rgb(A,map);

检查 RGB 图像的值是否在范围 [0, 1] 内。

[minVal,maxVal] = bounds(RGB(:))
minVal = 
0.0078
maxVal = 
0.9765

读取并显示示例文件中的第三个图像。

[A,map] = imread("corn.tif",3);
imshow(A,map)

Figure contains an axes object. The hidden axes object contains an object of type image.

返回示例图像的 alpha 通道。

[A,map,alpha] = imread("peppers.png");
whos alpha
  Name       Size            Bytes  Class     Attributes

  alpha      0x0                 0  double              

没有提供 Alpha 通道,因此 alpha 为空。

读取示例图像的特定像素区域。

用表示要读取的区域边界的向量元胞数组指定 PixelRegion 名称-值参量。第一向量描述要读取的行范围,第二向量描述要读取的列范围。

[A,map] = imread("corn.tif",PixelRegion={[201 400] [151 250]});

imread 函数读取 corn.tif 中 201–400 行和 151–250 列的图像数据,并返回 200×100 数组 A

显示图像。

imshow(A,map)

Figure contains an axes object. The hidden axes object contains an object of type image.

自 R2024b 起

一些图像文件在可交换图像文件格式 (Exif) Orientation 标记中包含方向元数据。使用 imread 读取图像文件时,您可以通过将 AutoOrient 名称-值参量指定为 true,根据此方向标记自动定向图像数据。

用 Exif Orientation 标记中的不同值创建同一图像的八个版本的分块布局。文件 clock_n.jpg 在其 Exif Orientation 标记中包含值 n。如果不指定 AutoOrient 名称-值参量,则读取图像时不考虑它们各自的 Exif Orientation 标记值。

filenames = "clock_" + string(1:8) + ".jpg";

for i = 1:8
    rawImages{i} = imread(filenames(i));
end

imshow(imtile(rawImages,BorderSize=[25 25],GridSize=[2 4]))

Figure contains an axes object. The hidden axes object contains an object of type image.

在将图像数据读入工作区之前,使用 AutoOrient 名称-值参量根据每个图像各自的 Exif Orientation 标记值对其进行变换。查看变换后的图像。

for i = 1:8
    orientedImages{i} = imread(filenames(i),AutoOrient=true);
end
imshow(imtile(orientedImages,BorderSize=[25 25],GridSize=[2 4]))

Figure contains an axes object. The hidden axes object contains an object of type image.

输入参数

全部折叠

图形文件的名称,指定为字符串标量或字符向量。

根据文件的位置,filename 可以采用下列形式之一。

位置

形式

当前文件夹或 MATLAB® 路径上的文件夹

指定 filename 中文件的名称。

例如:"myImage.jpg"

文件夹中的文件

如果该文件不在当前文件夹或 MATLAB 路径下的文件夹中,则指定完整或相对路径名。

例如:"C:\myFolder\myImage.png"

例如:"\imgDir\myImage.bmp"

统一资源定位器 (URL)

如果文件是通过 Internet URL 定位的,则 filename 必须包含协议类型,例如 http://

例如:"http://my_hostname/my_path/my_image.jpg"

远程位置

如果文件存储在远程位置,则 filename 必须包含指定为 URL 形式的文件的完整路径:

scheme_name://path_to_file/my_file.ext

根据远程位置,scheme_name 可以是下表中的值之一。

远程位置scheme_name
Amazon S3™s3
Windows Azure® Blob 存储wasb, wasbs
HDFS™hdfs

有关详细信息,请参阅处理远程数据

示例:"s3://my_bucket/my_path/my_image.heif"

图像格式,指定为指示标准文件扩展名的字符串标量或字符向量。调用 imformats 可查看支持的格式及其文件扩展名列表。

示例: "png"

要读取的图像,指定为整数标量或整数向量(对于 GIF 文件)。例如,如果 idx3,则 imread 函数读取文件中的第三个图像。对于 GIF 文件,如果 idx1:5,则 imread 函数只读取前五帧。idx 参量仅支持用于多图像 GIF、CUR、ICO 和 HDF4 文件。

从同一 GIF 文件读取多个帧时,请将 idx 指定为帧向量或将 Frames 名称-值参量指定为 "all"。由于构造 GIF 文件的方式,这些语法可提供比循环调用 imread 更快的性能。

注意

对应 HDF4 文件,idx 对应于要读取的图像的引用编号。引用编号不一定与文件中图像的顺序对应。您可以使用 imfinfo 将图像顺序与引用编号进行匹配。

示例: 2

示例: 6:10

数据类型: double

名称-值参数

全部展开

Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但参量对组的顺序无关紧要。

示例: imread("myImage.tif",Index=5) 读取 TIFF 文件的第五个图像。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: imread("myImage.tif","Index",5) 读取 TIFF 文件的第五个图像。

GIF 文件

全部展开

要读取的帧数,指定为正整数、整数向量或 "all"。例如,如果指定值 3,则 imread 将读取文件中的第三个帧。如果您指定 "all",则 imread 读取所有帧并按其在文件中显示的顺序返回这些帧。

示例: 5

示例: 1:10

示例: "all"

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | string | char

JPEG 文件

全部展开

自 R2024b 起

自动定向图像,指定为 falsetrue。将 AutoOrient 指定为 true 以根据图像文件中的 Exif Orientation 标记变换 filename 中的数据。如果您将 AutoOrient 指定为 false,则 imread 函数会忽略 Exif Orientation 标记。

数据类型: logical

JPEG 2000 文件

全部展开

要读取的区域的边界,指定为 {rows,cols} 形式的元胞数组。rows 值描述要读取的行的范围,而 cols 值描述要读取的列的范围。rowscols 都必须为包含以 1 开始的索引的二元素向量。例如,PixelRegion={[1 2] [3 4]} 读取由图像数据的第 1 和第 2 行以及第 3 和第 4 列界定的区域。

注意

如果您将 ReductionLevel 指定为正值,则在降低分辨率后,需要参照图像指定 PixelRegion

示例: {[1 100] [4 500]}

降低的图像分辨率,指定为非负整数。如果您将 ReductionLevel 指定为值 L,则图像分辨率按因子 2L 进行降低。约简级别受限于 imfinfo 函数输出中的 WaveletDecompositionLevels 字段指定的分解级别总数。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

与 MATLAB 7.9 (R2009b) 及更早版本兼容,指定为 falsetrue。如果您将 V79Compatible 指定为 true,则返回的灰度或 RGB 图像与之前版本的 imread(MATLAB 7.9 (R2009b) 及更早版本)一致。

数据类型: logical

PNG 文件

全部展开

背景颜色,指定为 "none"、正整数、范围 [0, 1] 内的数字,或由范围 [0, 1] 内的数字组成的三元素向量。如果您将 BackgroundColor 指定为 "none",则 imread 函数不执行任何合成操作。否则,imread 函数会将透明像素与背景颜色混合。

  • 如果输入图像为索引图像,BackgroundColor 的值必须为 [1, P] 范围中的一个整数,其中 P 是颜色图长度。

  • 如果输入图像是灰度图像,则 BackgroundColor 的值必须为范围 [0, 1] 内的数字。

  • 如果输入图像为 RGB,则 BackgroundColor 的值必须为三元素向量,其中的数字在 [0, 1] 范围内。

BackgroundColor 的默认值取决于 transparency 输出参量和图像类型的存在性:

  • 如果您请求 transparency 输出参量,则 BackgroundColor 的默认值为 "none"

  • 如果您不请求 transparency 输出:

    • 如果文件包含背景颜色块,则该块的颜色是 BackgroundColor 的默认值。

    • 如果文件不包含背景颜色块:

      • 如果输入图像是索引图像,则 BackgroundColor 的默认值为 1

      • 如果输入图像是灰度图像,则 BackgroundColor 的默认值为 0

      • 如果输入图像是 RGB 图像,则 BackgroundColor 的默认值为 [0 0 0]

示例: 2

示例: 0.5

示例: [0.2 0.8 0.5]

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | string | char

TIFF 文件

全部展开

自 R2024b 起

自动定向图像,指定为 falsetrue。将 AutoOrient 指定为 true 以根据图像文件中的 Exif Orientation 标记变换 filename 中的数据。如果您将 AutoOrient 指定为 false,则 imread 函数会忽略 Exif Orientation 标记。

注意

如果除了将 AutoOrient 指定为 true 之外,您还指定了 PixelRegion,则 imread 函数首先读取指定的区域,然后根据文件中的 Exif Orientation 标记变换该区域。

数据类型: logical

要读取的图像,指定为正整数。例如,如果 Index 的值是 3,则 imread 函数读取文件中的第三个图像。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

图像的相关信息,指定为由 imfinfo 函数返回的结构体数组。使用 Info 名称-值参量可帮助 imread 更快地找到多图像 TIFF 文件中的图像。

数据类型: struct

要读取的区域的边界,指定为 {rows,cols} 形式的元胞数组。rows 值描述要读取的行的范围,而 cols 值描述要读取的列的范围。rowscols 都必须为包含从 1 开始的索引的二元素或三元素向量。

  • rowscols[start stop] 形式的二元素向量指定要读取的第一个和最后一个行或列。例如,{[1 2] [3 4]} 读取由图像数据的第 1 和第 2 行以及第 3 和第 4 列界定的区域。

  • rowscols[start step stop] 形式的三元素向量指定要读取的第一个和最后一个行或列,以及步长。例如,{[1 2 10] [4 3 12]} 读取由图像数据的行 1 和 10 以及列 4 和 12 界定的区域,水平步长为 2,垂直步长为 3。

示例: {[1 100] [4 500]}

示例: {[100 5 200] [250 2 500]}

HEIF 和 HEIC 文件

自 R2025a 起

全部展开

自动定向图像的选项,指定为数值或逻辑值 1 (true)0 (false)。将 AutoOrient 指定为 true 以根据图像文件中的 Exif Orientation 标记变换 filename 中的数据。如果您将 AutoOrient 指定为 false,则 imread 函数会忽略 Exif Orientation 标记。

数据类型: logical

输出参量

全部折叠

图像数据,以数组的形式返回。如果图像数据有 m 行和 n 列,则:

  • 如果文件包含灰度图像,则 A 是一个 m×n 数组,其中包含的值表示图像中像素的强度。

  • 如果文件包含索引图像,则 A 是一个 m×n 数组,其中包含引用 map 的行的索引值。

  • 如果文件包含 RGB(真彩色)图像,则 A 是一个 m×n×3 数组。

  • 如果文件是一个包含使用 CMYK 颜色空间的彩色图像的 TIFF 文件,则 Am×n×4 数组。

A 的类取决于图像数据的图像格式和位深。有关详细信息,请参阅算法

A 中的索引图像数据相关联的颜色图,以类 double 的三列矩阵形式返回。

以矩阵形式返回的透明度信息。

  • 对于 PNG 文件:

    • 如果存在 alpha 通道并且您未指定 BackgroundColor 名称-值参量,则 transparency 是 alpha 通道。

    • 如果 alpha 通道不存在或您指定 BackgroundColor 名称-值参量,则 transparency 为空。

  • 对于 CUR 和 ICO 文件,transparency 为 AND(不透明度)掩码。

详细信息

全部折叠

提示

  • AutoOrient 名称-值参量仅适用于 JPEG、TIFF (自 R2024b 起)HEIF 或 HEIC (自 R2025a 起) 格式的文件。如果对任何其他格式的文件指定 AutoOrient 参量,则该参量不起作用。此行为允许您使用 AutoOrient 参量尝试自动定向图像集合,即使集合中的某些文件不是 JPEG、TIFF (自 R2024b 起)HEIF 或 HEIC (自 R2025a 起) 格式也是如此。

  • 下表显示当 AutoOrient 名称-值参量为 true 时,imread 函数如何使用 Exif Orientation 标记的值来变换图像数据。

    Orientation 字段的值变换的描述
    1无变换
    2围绕垂直轴翻转
    3旋转 180°
    4绕垂直轴翻转,然后旋转 180°
    5绕垂直轴翻转,然后逆时针旋转 90°
    6顺时针旋转 90°
    7绕垂直轴翻转,然后顺时针旋转 90°
    8逆时针旋转 90°

    (自 R2024b 起)

算法

全部折叠

对于大多数图像文件格式,imread 对每个颜色平面使用 8 位或更少位来存储图像像素。此表列出了返回的图像数组 A 与文件格式使用的位深对应的数据类型。

文件中的位深

imread 返回的数组的类

每像素 1 位

logical

每颜色平面 2 到 8 位

uint8

每像素 9 位到 16 位

uint16(BMP、JPEG、PNG 和 TIFF)

对于 16 位的 BMP 压缩格式 (5-6-5),MATLAB 返回 uint8

以下部分提供了有关特定格式的支持信息,各格式按名称的字母顺序列出。

扩展功能

全部展开

版本历史记录

在 R2006a 之前推出

全部展开

另请参阅

函数

实时编辑器任务