番外篇2:Matplotlib显示图像
学习如何使用 Matplotlib 显示 OpenCV 图像。
Matplotlib 是 Python 的一个很常用的绘图库,有兴趣的可以去官网学习更多内容。
显示灰度图
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('lena.jpg', 0)
# 灰度图显示,cmap(color map)设置为gray
plt.imshow(img, cmap='gray')
plt.show()
结果如下:
显示彩色图
OpenCV中 的图像是以 BGR 的通道顺序存储的,但 Matplotlib 是以 RGB 模式显示的,所以直接在 Matplotlib 中显示 OpenCV 图像会出现问题,因此需要转换一下:
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('lena.jpg')
img2 = img[:, :, ::-1]
# 或使用
# img2 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 显示不正确的图
plt.subplot(121),plt.imshow(img)
# 显示正确的图
plt.subplot(122)
plt.xticks([]), plt.yticks([]) # 隐藏x和y轴
plt.imshow(img2)
plt.show()
img[:,:,0]表示图片的蓝色通道,img[:,:,::-1]就表示BGR翻转,变成RGB,下面解释下:
熟悉 Python 的童鞋应该知道,对一个字符串s翻转可以这样写:s[::-1],’abc’变成’cba’,-1表示逆序。图片是二维的,所以完整地复制一副图像就是:
img2 = img[:,:] # 写全就是:img2 = img[0:height,0:width]
而图片是有三个通道,相当于一个长度为3的字符串,所以通道翻转与图片复制组合起来便是img[:,:,::-1]。
结果如下:
加载和保存图片
不使用 OpenCV,Matplotlib 也可以加载和保存图片:
import matplotlib.image as pli
img = pli.imread('lena.jpg')
plt.imshow(img)
# 保存图片,需放在show()函数之前
plt.savefig('lena2.jpg')
plt.show()
引用
文章转载自:EX2TRON'S BLOG