文章目录(Table of Contents)
简介
我们在处理图像的时候, 会使用到 matplotlib 和 opencv 两个库, 但是在实际的使用的时候, 我们会遇到颜色显示不正常的情况, 这是因为 matplotlib 使用的颜色模式是我们现在流行的 RGB 模式,而 opencv 使用的是 BGR 模式,即 RGB 的倒序模式,与我们通常的 RGB 是反向的。因此在使用 matplotlib 显示之前需要做一下图像颜色的转换。
所以这一篇主要介绍一下转换的方式, 主要参考链接如下.
参考资料: 为什么matplotlib显示opencv图像不正常
matplotlib 显示 opencv 图像
我们首先看一下如果不进行转换的话, 直接显示会是什么样子的.
- # 加载本地图片
- img_path1 = "./data/Preprocess/402_2000.jpg"
- img_check1 = cv2.imread(img_path1, cv2.IMREAD_COLOR)
- print(img_check1.shape)
- # 图片进行显示
- fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(7,7))
- axes.axis("off")
- axes.imshow(img_check1)
最终显示的效果如下:
我们只需要使用下面的语句就可以完成 BGR 到 RGB 的转换.
- img_check1 = cv2.cvtColor(img_check1, cv2.COLOR_BGR2RGB) # BGR => RGB
最后我们得到的效果如下所示:
- # 加载本地图片
- img_path1 = "./data/Preprocess/402_2000.jpg"
- img_check1 = cv2.imread(img_path1, cv2.IMREAD_COLOR)
- img_check1 = cv2.cvtColor(img_check1, cv2.COLOR_BGR2RGB) # BGR => RGB
- print(img_check1.shape)
- # 图片进行显示
- fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(7,7))
- axes.axis("off")
- axes.imshow(img_check1)
可以看到这样脸的颜色会看起来稍微正常一些.
读取和显示灰度图
读取灰度图
- # Using cv2.imread() method
- # Using 0 to read image in grayscale mode
- img = cv2.imread(path, 0)
在imread里面, 第二个参数设置为0, 此时读取的就是灰度图.
显示灰度图
同样,我们可以使用 matplotlib 来显示灰度图。只需要在 imshow 的部分设置 cmap='gray'
即可
- plt.imshow(arr, cmap='gray', vmin=0, vmax=255)
完成的实例代码如下所示:
- import numpy as np
- import matplotlib.pyplot as plt
- from PIL import Image
- fname = 'image.png'
- image = Image.open(fname).convert("L")
- arr = np.asarray(image)
- plt.imshow(arr, cmap='gray', vmin=0, vmax=255)
- plt.show()
参考资料,Display image as grayscale using matplotlib
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论