阿菊的OpenCv🎨1——cv2读取图像并用matplotlib(plt)显示多幅图像以及RGB图像通道的拆分(cv2.split)与合并(cv2.merge)

"Opencv, plt, cv2.split, cv2.merge"

Posted by fuhao7i on December 19, 2020

“Yeah It’s on. ”

0. 原始图像

在这里插入图片描述

1. cv2读取图像并用matplotlib显示

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

img = cv2.imread('../images/ju.jpg')

plt.figure('Aju') #窗口名称
plt.title('jujujuju') #图像名称
plt.imshow(img)
plt.show()

e.g.运行结果如下:

为什么我们用plt显示的图像看起来偏蓝色呢?因为OpenCV在读取图像的时候是按照BGR通道顺序来读取的,而我们平时看到的正常图片的编码格式为RGB通道顺序。所以为了用plt将图像显示为正常我们看到的图像,这里需要引入RGB图像通道的拆分与合并

2.RGB图像通道的拆分与合并

将cv2读取的图像按照BGR的通道顺序进行拆分后再按照RGB的通道顺序进行合并,图像就可以正常显示了。

1
2
3
4
5
6
7
8
9
10
11
12
13
import cv2
import matplotlib.pyplot as plt

img = cv2.imread('../images/ju.jpg')

b, g, r = cv2.split(img) #按照BGR通道进行拆分

img = cv2.merge([r, g, b]) #按照RGB通道顺序合并
 
plt.figure('Aju') #窗口名称
plt.title('jujujuju')
plt.imshow(img)
plt.show()

e.g.运行结果如下:

<img src=”https://img-blog.csdnimg.cn/20201215155931573.png#pic_center” width=70%>

3. matplotlib 显示多幅图像

plt显示多幅图像需要用到subplot。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import cv2
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread('../images/ju.jpg')
b0, g0, r0 = cv2.split(img)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

zeros = np.zeros(img.shape[:2], dtype = "uint8")
b = cv2.merge([zeros, zeros, b0])
g = cv2.merge([zeros, g0, zeros])
r = cv2.merge([r0, zeros, zeros])  

rg = cv2.merge([r0, g0, zeros])
rb = cv2.merge([r0, zeros, b0])
gb = cv2.merge([zeros, g0, b0])

plt.figure('AJu', figsize=(10, 10)) #窗口名称和大小
plt.suptitle('Multi_ju')
plt.subplot(3, 3, 2), plt.title('origin'), plt.imshow(img), plt.axis('off')
plt.subplot(3, 3, 4), plt.title('R'), plt.imshow(r), plt.axis('off')
plt.subplot(3, 3, 5), plt.title('G'), plt.imshow(g), plt.axis('off')
plt.subplot(3, 3, 6), plt.title('B'), plt.imshow(b), plt.axis('off')
plt.subplot(3, 3, 7), plt.title('RG'), plt.imshow(rg), plt.axis('off')
plt.subplot(3, 3, 8), plt.title('RB'), plt.imshow(rb), plt.axis('off')
plt.subplot(3, 3, 9), plt.title('GB'), plt.imshow(gb), plt.axis('off')
#plt.axis('off')隐藏坐标轴

plt.show()

duangduangduang~

在这里插入图片描述

我会坚持分享更多关于计算机视觉的知识,同时也希望大家可以多多关注我,让我们一起进步,加油加油!!!

在这里插入图片描述