学习目标:
- 学习图像读取、显示和保存
- 熟悉三个函数:cv2.imread(),cv2.imshow(),cv2.imwrite()
- 使用Matplotlib显示图像
Using OpenCV
读取图像
cv2.imread(), 读取图像。
第一个参数:图像的路径;
第二个参数:图像读取的方式。具体选项如下:
- cv2.IMREAD_COLOR:读取彩色图像,忽略图像的透明度,是默认的读取方式。
- cv2.IMREAD_GRAYSCALE:以灰度图的方式读取。
- cv2.IMREAD_UNCHANGED:返回图像本身的通道数量,比如灰度图读出来就是单通道;彩色图读出来是3通道;带有透明度的图像,会读取alpha通道,就是4通道。
注:可以使用整数表示图像读取的方式,分别为 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(),在窗口显示图像,窗口会适应图像的大小。
第一个参数:字符串,窗口的名字。
第二个参数:图像数据。
代码展示:
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllwindows()
cv2.waitKey():键盘绑定函数。如果参数为具体数字,比如5,即5毫秒后自动关闭窗口。如果参数为0,那么点击键盘任何键,窗口会关闭。
cv2.destroyAllWindows():销毁所有打开的窗口。
cv2.destroyWindow() :销毁指定窗口,参数是窗口的名字。
注:通常可以提前创建windows,之后在载入图像。这种情况下,可以控制窗口的大小,对于大图显示,非常实用。函数如下:
cv2.namedWindow(),默认参数为 cv2.WINDOW_AUTOSIZE,自动缩放窗口,适应图像的大小。cv2.WINDOW_NORMAL,可以手工调整窗口大小。
代码展示:
img = cv2.imread('meshA.jpg') # (w, h, d) = (4000, 3000, 3)
cv2.namedWindow('meshA', cv2.WINDOW_NORMAL)
cv2.resizeWindow('meshA', 400, 300)
print(img.shape)
cv2.imshow('meshA', img) # 正常显示图片,窗口大小为(400, 300)
cv2.waitKey(0)
cv2.destroyAllWindows()
img = cv2.imread('meshA.jpg') # (w, h, d) = (4000, 3000, 3)
cv2.namedWindow('meshA', cv2.WINDOW_AUTOSIZE)
cv2.resizeWindow('meshA', 400, 300) # 由于参数:cv2.WINDOW_AUTOSIZE, 该语句没有作用
print(img.shape)
cv2.imshow('meshA', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
图像保存
cv2.imwrite(),保存图像。
第一个参数:图像名字,通常包含路径。
第二个参数:内存的图像数据。
代码展示:
cv2.imwrite('messigray.png',img)
内容总结
img = cv2.imread('../data/messipyr.jpg', 0)
print(img.shape)
cv2.imshow('image', img)
k = cv2.waitKey(0)
if k == 27: # wait for ESC key to exit
cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
cv2.imwrite('messigray.png', img)
cv2.destroyAllWindows()
Using Matplotlib
Matplotlib是针对Python的画图库,包含各种处理方法。下面看如何显示图像:
import numpy as np
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('messi5.jpg',0)
plt.imshow(img, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
plt.show()