将彩色图片分离为RGB三个通道的灰度图,并输出

将彩色图片分离为RGB三个通道的灰度图,并输出_第1张图片

#将一张三通道图片转换为RGB三通道灰度图,并将每个通道的矩阵输出
import cv2
import matplotlib.pyplot as plt
'''
彩色图像转化为RGB三幅灰度图像
'''
def main():
  img='./bogi.jpg'
  im=cv2.imread(img)
  B,G,R=cv2.split(im)

  #结果展示
  plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文乱码
  #子图1,原始图像
  plt.subplot(141)
  #plt默认使用三通道显示图像,所以需要制定cmap参数为gray
  #imshow()对图像进行处理,画出图像,show()进行图像显示
  #opencv的颜色通道顺序为[B,G,R],而matplotlib颜色通道顺序为[R,G,B],所以需要调换一下通道位置
  plt.imshow(im[:,:,(2,1,0)])
  plt.title('原图像')
  #不显示坐标轴
  plt.axis('off')

  #子图2,通道R灰度图像
  plt.subplot(142)
  plt.imshow(R,cmap='gray')
  plt.title('通道R')
  plt.axis('off')
  print("channel[R]")
  print(im[:, :, 2])

  #子图3,通道G
  plt.subplot(143)
  plt.imshow(G,cmap='gray')
  plt.title('通道G')
  plt.axis('off')
  print("channel[G]")
  print(im[:, :, 1])

  #子图4,B
  plt.subplot(144)
  plt.imshow(B,cmap='gray')
  plt.title('通道B')
  plt.axis('off')
  print("channel[B]")
  print(im[:, :, 0])

  plt.show()


if __name__== '__main__':
  main()

 使用cv2.imread读取图像时,默认读取彩色图像,并以数组的方式存储。但是opencv的顺寻时BGR,所以在输出的时候需要调整一下数组的顺序。你也可以试着换一下通道,改变图片的颜色。

将以上代码的

plt.imshow(im[:,:,(2,1,0)] 

改变成

 

 plt.imshow(im[:,:,(1,0,2)])

结果如下图

将彩色图片分离为RGB三个通道的灰度图,并输出_第2张图片

你可能感兴趣的:(opencv,python,计算机视觉)