最近在做一个图像处理的大作业,涉及到matplotlib与OpenCV的一些图片读取与显示的问题,感觉非常有意思,需要把它彻底掌握理解,遂写一篇博客记录一下自己的学习笔记,以备遗忘时能迅速找回知识点。希望对自己CV的学习有一些帮助。好,我们开始吧。
import cv2 # 利用opencv读取图像
import numpy as np
import matplotlib.pyplot as plt # 利用matplotlib显示图像
path = 'C:/Users/86187/Desktop/image/'
img = cv2.imread(path + "lena.png") #读取图像
# OpenCV显示图像
cv2.imshow('lena', img)
cv2.waitKey(0)
这是lena女神的原图,OpenCV读取并显示的结果。
那我们用OpenCV读取,用matplotlib显示效果如何呢?
# matplotlib显示图像
plt.imshow(img)
plt.axis('off')
plt.show()
看,图片就像变了个颜色似的,看来这样显示是有问题的。这到底是怎么回事儿呢?原来啊,OpenCV读取图片(cv2.imread())后,图像的颜色通道顺序是[B, G, R],和matplotlib读取图片(plt.imread())后,图像的颜色通道顺继续[R, G, B]恰好是相反的。
这是,我们要想让图片正常显示,需要进行通道交换。
img = img[:,:,(2,1,0)] # 交换B和R通道
# matplotlib显示图像
plt.imshow(img)
plt.axis('off')
plt.show()
现在就正常了!
接下来是matplotlib显示灰度图的问题。
img = cv2.imread(path + 'lena.png', 0)
cv2.imshow('lena', img)
cv2.waitKey(0)
我们看到图像已经成功转换为了灰度图。
接下来我们用matplotlib来显示看看。
img = cv2.imread(path + 'lena.png', 0)
plt.imshow(img)
plt.axis('off')
plt.show()
看,明明显示的是灰度图,它怎么突然有颜色了呢?你说无中生有也就罢了,怎么还变成了绿色??
原来啊,matplotlib显示图像,默认以三通道显示图像,我们需要在plt.imshow()里添加参数。
img = cv2.imread(path + 'lena.png', 0)
plt.imshow(img, cmap='gray')
plt.axis('off')
plt.show()
看,这下就OK了吧!
参考内容–>传送门