Python OpenCV读取和保存图像
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
-
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()函数将彩色图片存储在一个3D的ndarray中,行(高度) x 列(宽度)x 颜色(3)。让我们以一张彩色图片作为输入,并使用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)的三维numpy数组。
The cv2.imwrite()函数
cv2.imwrite()函数按照指定的名称保存图像。文件扩展名和位置也是从函数的第一个参数选择的。
该函数返回一个布尔值,如果图像成功写入,则返回True;否则返回False。如果指定了不支持的图像格式,则会将图像转换为8位无符号(CV_8U)并以此方式保存。
以下是此函数的语法-
Cv2.imwrite(filename, img[, params])
在这里,
- filename:要保存文件的名称/目的地。
-
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 的空白图像。
示例
在此示例中,我们将从图像文件夹读取 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()函数成功地将图像保存在Images文件夹中,命名为 Output_lenna_opencv_red_high.jpg 。