关于matplotlib与opencv读取和显示图片

在这里插入图片描述
最近在做一个图像处理的大作业,涉及到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了吧!
参考内容–>传送门

posted @ 2020-04-22 22:42  田纳尔多  阅读(256)  评论(0编辑  收藏  举报