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])

参数

  • 文件名: 要加载的文件的名称/路径。

  • 标志: 可以取imreadModes值的标志,指定加载图像的颜色类型。

返回值

  • 该方法返回一个NumPy数组。如果无法读取图像(由于文件丢失、权限不足或格式不支持/无效),则此函数将返回空矩阵而不是生成错误。

该函数通过内容而不是扩展名来确定图像的类型。

支持的文件格式

  • Windows位图: *.bmp, *.dib

  • JPEG文件: *.jpeg, *.jpg, *.jpe

  • JPEG 2000文件: *.jp2

  • 便携式网络图形: *.png

  • WebP: *.webp

  • 便携式图像格式: *.pbm, *.pgm, *.ppm *.pxm, *.pnm

  • Sun光栅: *.sr, *.ras

  • OpenEXR图像文件: *.exr

  • Radiance HDR: *.hdr, *.pic

注意: GDAL支持光栅和矢量地理空间数据

读取图像的算法

  • 导入cv2模块。

  • 使用cv2.imread()方法读取图像。

  • 使用cv2.imshow()方法在窗口中显示图像。

  • 使用cv2.waitKey(0)方法设置输出窗口的计时器。

  • 最后,使用cv2.destroyAllWindows()方法关闭输出窗口。

示例

让我们以图像作为输入。

#importing the opencv module  
import cv2  
  
# read image using imread('path') and 0 denotes read as grayscale image  
img = cv2.imread('input.jpg',0)

# display image
cv2.imshow('image',img)  
  
cv2.waitKey(0) 
cv2.destroyAllWindows()  

输出

示例

imread()函数将彩色图像存储在行(高度)x列(宽度)x颜色(3)的3D ndarray中。让我们以彩色图像作为输入,并使用imread()函数读取它。

#importing the opencv module  
import cv2  
  
# read image 
img = cv2.imread('logo.png')

# display image
cv2.imshow('image',img)  
cv2.waitKey(0) 
cv2.destroyAllWindows()

print('Type:',type(img))
print('Shape:',img.shape)
print('datatype',img.dtype)

输出

Type: <class 'numpy.ndarray'>
Shape: (225, 225, 3)
datatype uint8

图像对象img存储了形状为(225, 225, 3)的3维NumPy数组。

cv2.imwrite()函数

cv2.imwrite()函数以指定的名称保存图像。文件名扩展名和位置也从函数的第一个参数中选择。

此函数返回布尔值,如果图像成功写入,则返回True,否则返回False。如果指定了不受支持的图像格式,则图像将转换为8位无符号(CV_8U)并以这种方式保存。

以下是此函数的语法:

Cv2.imwrite(filename, img[, params])

其中:

  • 文件名: 要保存文件的名称/路径。

  • img: 它采用ndarray的值来保存图像。

  • params: 编码为对的格式特定参数列表。

示例

在这个例子中,我们将使用(100,100,3)形状的零数组保存图像。

#import the numpay and opencv modules 
import numpy as np
import cv2

# create a 3-d numpy array
blank_image2 = np.zeros((100,100,3), dtype=np.uint8)

# save or create an image
cv2.imwrite("written_image.jpg", blank_image2)

输出

True

该函数返回布尔值True,这表示文件已成功写入/保存,指定名称为written_image.jpg的空白图像也显示在上面的输出块中。

示例

在这个例子中,我们将从Image文件夹读取lenna.png图像,然后使用params参数以最高的质量重新写入它。

矩阵 [cv2.IMWRITE_JPEG_QUALITY, 100] 表示最高质量。而0表示最低质量,默认值为95。

#importing the opencv module  
import cv2  
  
# read image using imread('path') and 0 denotes read as grayscale image  
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文件夹中。

更新于: 2023年5月30日

1K+ 次浏览

启动你的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.