python 之 opencv-matplotlib显示图片

Matplotlib


Matplotlib是Python的一个很常用的绘图库,有兴趣的可以去官网学习更多内容。

显示灰度图

1
2
3
4
5
6
7
8
import cv2
import matplotlib.pyplot as plt

img = cv2.imread('lena.jpg', 0)

# 灰度图显示,cmap(color map)设置为gray
plt.imshow(img, cmap='gray')
plt.show()

结果如下:

plt.show()和plt.imshow()的区别

plt.imshowcmap颜色参数选择


显示彩色图

OpenCV中的图像是以BGR的通道顺序存储的,但Matplotlib是以RGB模式显示的,所以直接在Matplotlib中显示OpenCV图像会出现问题,因此需要转换一下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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表示逆序。图片是二维的,所以完整地复制一副图像就是:

1
img2 = img[:,:] # 写全就是:img2 = img[0:height,0:width]

而图片是有三个通道,相当于一个长度为3的字符串,所以通道翻转与图片复制组合起来便是img[:,:,::-1]

结果如下:

加载和保存图片

不使用OpenCV,Matplotlib也可以加载和保存图片:

1
2
3
4
5
6
7
8
import matplotlib.image as plt

img = plt.imread('lena.jpg')
plt.imshow(img)

# 保存图片,需放在show()函数之前
plt.savefig('lena2.jpg')
plt.show()

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×