目标
- 学会如何读取一张图像,如何展示和如何保存
- 学会使用函数:cv2.imread(),cv2.imshow(),cv2.imwrite()
- 学会如何使用Matplotlib展示图像
使用OpenCV
读取图片
使用函数cv2.imread()读取一张图片。图片必须在工作文件夹里或者给定完整的绝对路径。
retval = cv2.imread(filename[, flags])
其中,第二个参数指定读取图片的方式,常用有如下三种(其余方式参见手册)
- cv2.IMREAD_COLOR:加载彩色图片,忽略图像的透明部分,是函数的默认参数
- cv2.IMREAD_GRAYSCALE:以灰度模式读取图片
- cv2.IMREAD_UNCHANGED:不改变图片,读取图片包括alpha通道。
- 可以分别使用1,0,-1代替上面三个标志
import numpy as np
import cv2
# Load an color image in grayscale
img = cv2.imread('messi5.jpg',0)
注意:如果图片路径错误,不会抛出异常,但是如果使用print(img)会返回None提示没有图片读入。
显示图片
使用函数cv2.imshow()在一个窗口中显示一张图片,窗口会自动适应图片的尺寸。
None = cv2.imshow(winname, mat)
第一个参数是窗口名称,可以是一个字符串,第二个参数是显示的图片。
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.waitKey()是一个键盘输入函数。它的参数是时间,单位是毫秒。函数等待指定的时间当产生键盘事件时。
cv2.destoryAllWindows()删除我们创建的窗口。
注意:有一种特殊情况是先创建一个窗口,之后再加载图片,并且可以指定窗口是否可以修改大小。使用函数cv2.namedWindow()实现上述功能,默认的标签为cv2.WINDOW_AUTOSIZE,但是当指定标签为cv2.WINDOW_NORMAL时,可以修改窗口尺寸,这样有助于当图片尺寸较大的时候显示图片。
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
保存图片
使用函数cv2.imwrite()来保存图片。retval = cv2.imwrite(filename, imh[, params])
其中,第一个参数是文件名,第二个参数是想要保存的图片。
cv2.imwrite('messigray.png',img)
上面的语句将图片以png格式保存到工作路径下。
案例
import numpy as np
import cv2 as cv
img = cv.imread('messi5.jpg',0)
cv.imshow('image',img)
k = cv.waitKey(0)
if k == 27: # wait for ESC key to exit
cv.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
cv.imwrite('messigray.png',img)
cv.destroyAllWindows()
上面的代码将以灰度图的形式加载一张图片,并显示图片,当键盘输入'S'时,保存图片并退出,当输入‘ESC’时仅退出。
注意:如果使用64位电脑,需要将k = cv.waitKey(0)
改为k = cv.waitKey(0) & 0xFF。
使用Matplotlib
Matplotlib是一个提供多种绘图方法的Python绘图库。下面将展示如何使用Matplotlib去显示图片,实现图片缩放和保存功能。
import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('lena521.png',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
plt.show()
注意:OpenCV是以BGR模式加载彩色图片,而Matplotlib则是以RGB模式显示。所以如何使用OpenCV读取图片再用Matplotlib显示会导致显示错误。