OpenCV Python 程序读取和保存图像
OpenCV-python 是 Python 中的开源计算机视觉库,用于处理图像和视频以检测人脸和物体。它是 Python 中的图像处理库之一,使用 Python Numpy 库,因此所有图像数组都表示为 ndarray 类型。
使用 pip 安装 OpenCV
Pip install opencv-python
OpenCV 需要 numpy 库,我们需要确保也安装了 numpy 库。 Python OpenCV 模块提供函数 cv2.imread() 和 cv2.imwrite() 来读取/加载和写入/保存图像文件。
在本文中,我们将了解如何使用 Python OpenCV 模块读取和保存图像文件。
cv2.imread() 函数
cv2.imread() 函数读取/加载图像并将其存储为 numpy 数组。
语法
Cv2.imread(filename[, flags])
参数
Filename:要加载的文件的名称/目标。
Flags:可以采用 ImreadModes 值的标志,用于指定已加载文件的颜色类型图像
返回值
该方法返回一个 Numpy 数组。如果无法读取图像(由于文件丢失、权限不当或格式不受支持/无效),此函数将返回一个空矩阵,而不是生成错误。
该函数使用内容而不是扩展名来决定图像的类型。
支持的文件格式
Windows 位图:*.bmp、*.dib
JPEG 文件:*.jpeg、*.jpg、*.jpe
JPEG 2000 文件:*.jp2
便携式网络图形:*.png
WebP:*.webp
便携式图像格式:*.pbm、*.pgm、*.ppm *.pxm、*.pnm
太阳栅格:*.sr、*.ras
OpenEXR 图像文件:*.exr
Radiance HDR:*.hdr、*.pic
注意:GDAL 支持栅格和矢量地理空间数据
读取图像的算法
导入 cv2 模块。
使用 cv2.imread() 方法读取图像。
使用 cv2.imshow() 方法在窗口中显示图像,
并使用 cv2.waitKey(0) 方法为输出窗口设置计时器。
最后,使用 cv2.destroyAllWindows() 方法关闭输出窗口。
示例
让我们将图像作为输入。
#导入 opencv 模块 import cv2 # 使用 imread('path') 读取图像,0 表示读取为灰度图像 img = cv2.imread('input.jpg',0) # 显示图像 cv2.imshow('image',img) cv2.waitKey(0) cv2.destroyAllWindows()
输出
示例
imread() 函数将彩色图像存储在行(高度)x 列(宽度)x 颜色(3)的 3D ndarray 中。让我们将彩色图像作为输入,并使用 imread() 函数读取它。
#导入 opencv 模块 import cv2 # 读取图像 img = cv2.imread('logo.png') # 显示图像 cv2.imshow('image',img) cv2.waitKey(0) cv2.destroyAllWindows() print('Type:',type(img)) print('Shape:',img.shape) print('datatype',img.dtype)
输出
类型:<class 'numpy.ndarray'>形状:(225, 225, 3) 数据类型 uint8
图像对象 img 存储了 (225, 225, 3) 形状的 3 维 numpy 数组。
cv2.imwrite() 函数
cv2.imwrite() 函数以指定的名称保存图像。文件扩展名和位置也是从函数的第一个参数中选择的。
此函数返回一个布尔值,如果图像写入成功,则返回 True。否则将返回 False。如果指定了不支持的图像格式,则图像将转换为 8 位无符号 (CV_8U) 并以此方式保存。
以下是此函数的语法 –
Cv2.imwrite(filename, img[, params])
其中,
filename:文件必须保存的名称/目标。
img:需要一组值来保存图像。
params:以对的形式编码的格式特定参数列表。
示例
在此示例中,我们将使用形状为 (100,100,3) 的零数组保存图像。
#导入 numpay 和 opencv 模块 import numpy as np import cv2 #创建一个 3-d numpy 数组 blank_image2 = np.zeros((100,100,3), dtype=np.uint8) #保存或创建图像 cv2.imwrite("written_image.jpg", blank_image2)
输出
True
该函数返回布尔值 True,表示已使用指定名称成功写入/保存文件。我们还可以在上面的输出块中看到名为 written_image.jpg 的空白图像。
示例
在此示例中,我们将从 Image 文件夹中读取 lenna.png 图像,然后使用 params 参数以最高质量的方式重新写入它。
矩阵 [cv2.IMWRITE_JPEG_QUALITY, 100] 表示最高质量。而 0 表示最低质量,默认值为 95。
#导入 opencv 模块 import cv2 # 使用 imread('path') 读取图像,0 表示读取为灰度图像 img = cv2.imread('input.jpg',1) cv2.imshow('Input image',img) cv2.waitKey(0) cv2.destroyAllWindows() print('Type:',type(img)) status = cv2.imwrite('Images/Output_lenna_opencv_red_high.jpg', img, [cv2.IMWRITE_JPEG_QUALITY, 100]) print('Status:', status)
输入
Type: <class 'numpy.ndarray'Status: True Details of the
img 对象的类型为 ndarray。并且 imwrite() 函数已成功将图像 Output_lenna_opencv_red_high.jpg 保存在 Images 文件夹中。