#将一张三通道图片转换为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)])
结果如下图