Python imread():使用 OpenCV.imread() 加载图像


imread()在本教程中,我们将详细学习如何使用OpenCV-Python 方法以及使用该imread()方法加载图像的不同方式。

在 Python 中,OpenCV 库中的 imread() 方法允许进行多功能图像加载。该函数接受两个参数:图像文件名(如果不在工作目录中,则带有完整路径)和一个可以确定如何读取图像的标志参数。

了解 OpenCV-Python 中的 imread() 函数

imread()是OpenCV-Python库中最有用和最常用的方法之一它用于从指定文件加载Python程序中的图像。numpy.ndarray加载图像成功后返回一个(NumPy N维数组)。当加载的图像是彩色图像时,numpy.ndarray是一个3 维数组;当加载的图像是灰度图像时,这是一个2 维数组。

设置 OpenCV 以在 Python 中加载图像

为了使用Pythonimread()方法,我们需要opencv-python库cv2的模块为此,我们必须首先在虚拟环境或本地系统中安装该库,然后在Python程序中导入该模块。以下是安装和导入它的命令:opencv-pythoncv2

# Installing the opencv-python library
pip install opencv-python
# Importing the cv2 module
import cv2

OpenCV-Python 中 imread() 函数的语法解析

以下是Python方法的正确语法imread()

cv2.imread(filename, flag)

参数: cv2.imread()方法有两个参数。两个参数如下:

  1. filename是要传递的第一个参数,也是必需的参数,它采用表示图像文件路径(或带扩展名的图像名称)的字符串值。注意:如果图像文件不在工作目录中,我们必须传递图像文件的完整路径。
  2. flag是要传递的第二个参数,也是可选参数,通常采用三种类型的值:cv2.IMREAD_COLORcv2.IMREAD_GRAYSCALEcv2.IMREAD_UNCHANGED实际上,这flag定义了读取图像的模式。说明:flag该参数默认为cv2.IMREAD_COLOR1

返回值: 如果图像加载成功,cv2.imread()方法返回一个(NumPy N维数组)。注意:如果由于任何原因(例如丢失文件、权限不正确、格式不受支持或无效)而无法读取图像,它会返回一个空矩阵( Mat::data==NULL )。numpy.ndarray

OpenCV-Python 中 imread() 支持的图像格式

以下是该方法支持的图像格式cv2.imread()

  • 便携式网络图形*.png
  • 便携式图像格式*.pbm, *.pgm, *.ppm *.pxm,*.pnm
  • Windows 位图*.bmp
  • JPEG 文件*.jpeg, *.jpg,*.jpe
  • JPEG 2000 文件*.jp2
  • 网络P*.webp
  • PFM 文件*.pfm
  • 太阳光栅*.sr,*.ras
  • OpenEXR 图像文件*.exr
  • 辐射 HDR*.hdr,*.pic
  • TIFF 文件*.tiff,*.tif

注意:格式图像的读取.JPEG  取决于系统、平台或环境(如x86/ARM)等安装的OpenCV库的版本。最重要的是图像的类型不是由图像文件扩展名决定的,而是由图像文件numpy.ndarray扩展名决定的。通过方法返回的内容cv2.imread()

让我们 用 Python 代码实现一切……

使用示例图像

使用 cv2.IMREAD_COLOR 标志加载图像

flag传递值cv2.IMREAD_COLOR时,图像首先转换为没有透明通道的三通道BGR彩色图像,然后加载到程序中。

它是参数的默认值flag对应的整数cv2.IMREAD_COLOR值为1我们也可以用1来代替 cv2.IMREAD_COLOR. 注意:我们正在使用.shape方法来访问图像的形状。它返回数、列数通道数元组

img = cv2.imread('sample_image.png', cv2.IMREAD_COLOR)
print("Shape of the loaded image is", img.shape)

输出:

Shape of the loaded image is (512, 512, 3)

输出元组有三个值,分别512是样本图像的行数(图像的高度)、512列数(图像的宽度)和3通道数。

这里加载的图像只有三个通道蓝绿和红,标志值为cv2.IMREAD_COLOR

第四个通道是透明度或 Alpha 通道,即使它存在于样本图像中,也会被忽略。

使用 cv2.IMREAD_GRAYSCALE 标志加载图像

flag 传递值cv2.IMREAD_GRAYSCALE时,图像首先被转换为单通道灰度图像,然后加载到程序中。对应的整数值我们也可以cv2.IMREAD_GRAYSCALE用来代替00cv2.IMREAD_GRAYSCALE

img = cv2.imread('sample_image.png', cv2.IMREAD_GRAYSCALE)
print("Shape of the loaded image is", img.shape)

输出:

Shape of the loaded image is (512, 512)

输出元组只有两个值,512一是样本图像中的行数,二512是列数。无论传递给该方法的输入样本图像如何,当值为 或cv2.imread(),图像都将作为灰度图像加载flag0cv2.IMREAD_GRAYSCALE

使用 cv2.IMREAD_UNCHANGED 标志加载图像

flag 与值一起传递cv2.IMREAD_UNCHANGED时,图像将与 alpha 或透明度通道(如果存在)一起加载到程序中。对应的整数值我们也可以cv2.IMREAD_UNCHANGED用来代替-1-1cv2.IMREAD_UNCHANGED

img = cv2.imread('sample_image.png', cv2.IMREAD_UNCHANGED)
print("Shape of the loaded image is",img.shape)

输出:

Shape of the loaded image is (512, 512, 4)

输出元组有三个值,分别512是样本图像的行数(图像的高度)、512列数(图像的宽度)和4通道数。

这里加载的图像有四个通道蓝色、绿色、红色和透明度,标志值为cv2.IMREAD_UNCHANGED第四个通道(即透明度或 Alpha 通道)如果存在于示例图像中,则将包含在内。

总结并探索进一步的可能性

在本教程中,您学习了仅通过使用不同的参数值来加载图像的不同方法flag只需记住两件事,如果当前工作目录中没有示例图像文件,则必须传递示例图像文件的完整路径,并且还可以将整数值传递[1, 0, & -1]给与.flag[cv2.IMREAD_COLOR, cv2.IMREAD_GRAYSCALE, & cv2.IMREAD_UNCHANGED]

现在,轮到您应用这些新发现的知识了。您将如何在下一个项目中使用 imread() ?