OpenCV Python 程序读取和保存图像

pythonserver side programmingprogramming

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 文件夹中。


相关文章