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-python
cv2
# 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()
方法有两个参数。两个参数如下:
filename
是要传递的第一个参数,也是必需的参数,它采用表示图像文件路径(或带扩展名的图像名称)的字符串值。注意:如果图像文件不在工作目录中,我们必须传递图像文件的完整路径。flag
是要传递的第二个参数,也是可选参数,通常采用三种类型的值:cv2.IMREAD_COLOR
、cv2.IMREAD_GRAYSCALE
和cv2.IMREAD_UNCHANGED
。实际上,这flag
定义了读取图像的模式。说明:flag
该参数默认为cv2.IMREAD_COLOR
或1
。
返回值: 如果图像加载成功,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
用来代替。0
0
cv2.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()
,图像都将作为灰度图像加载。flag
0
cv2.IMREAD_GRAYSCALE
使用 cv2.IMREAD_UNCHANGED 标志加载图像
当flag
与值一起传递cv2.IMREAD_UNCHANGED
时,图像将与 alpha 或透明度通道(如果存在)一起加载到程序中。对应的整数值我们也可以cv2.IMREAD_UNCHANGED
用来代替。-1
-1
cv2.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() ?