主要内容

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

imread

R2026a

从图形文件读取图像

描述

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 文件)。例如,如果 idx 是 3,则 imread 函数读取文件中的第三个图像。对于 GIF 文件,如果 idx 是 1: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 起

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

数据类型: logical

JPEG 2000 文件

全部展开

要读取的区域的边界,指定为 {rows,cols} 形式的元胞数组。rows 值描述要读取的行的范围,而 cols 值描述要读取的列的范围。rows 和 cols 都必须为包含以 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) 及更早版本兼容,指定为 false 或 true。如果您将 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 起

自动定向图像,指定为 false 或 true。将 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 值描述要读取的列的范围。rows 和 cols 都必须为包含从 1 开始的索引的二元素或三元素向量。

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

  • rows 或 cols 的 [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 文件,则 A 为 m×n×4 数组。

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

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

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

  • 对于 PNG 文件:

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

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

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

注意

如果您在不指定背景颜色情况下为 RGB PNG 图像请求透明度输出,则图像数据不会与透明度合成。因此,图像数据输出包含完全透明像素的颜色信息,就像它存储在文件中一样。这可能导致图像看起来异常。

详细信息

全部折叠

提示

  • 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 之前推出

全部展开

另请参阅

函数

实时编辑器任务