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

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

  • 0. 原始图像
  • 1. cv2读取图像并用matplotlib显示
  • 2.RGB图像通道的拆分与合并
  • 3. matplotlib 显示多幅图像

0. 原始图像

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

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

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的通道顺序进行合并,图像就可以正常显示了。

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.运行结果如下:

3. matplotlib 显示多幅图像

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

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~

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

阿菊的OpenCv11——cv2读取图像并用matplotlib(plt)显示多幅图像以及RGB图像通道的拆分(cv2.split)与合并(cv2.merge)_第2张图片

你可能感兴趣的:(阿菊的OpenCv,opencv,matplotlib,rgb,图像处理,计算机视觉)