python-3.x - matplotlib 中的 imhsow 与 opencv 显示的不同
问题描述
似乎 matplotlib.pyplot.imhsow(plt.imshow) 没有显示原始图片,它是否缩放了图像的值?我在使用 cv2.imhsow 和 plt.imhsow 时发现了不同之处。
我有两张图像,它们的亮度不同。但是,当使用 时plt.imshow
,它们显示相同。但是使用时显示正确cv2.imhow
。这是代码和图像。
import cv2
import matplotlib.pyplot as plt
img_o = plt.imread('1.jpg')
img = plt.imread('2.jpg')
cv2.imshow('img', img)
cv2.imshow('img_o', img_o)
cv2.waitKey(0)
cv2.destroyAllWindows()
plt.gray()
plt.imshow(img)
plt.show()
plt.imshow(img_o)
plt.show()
用于 的图像imshow
,它们的亮度不同。
使用时cv2.imshow
,可以显示为原来的。
显示的图像plt.imshow
在下面上传。它们看起来完全一样,似乎plt.imshow
忽略了图像的亮度。
解决方案
图像的类型为 uint8,形状为 48 x 48 像素。因此 matplotlibimshow
将使用活动颜色图 ( plt.gray()
) 对它们进行颜色映射。颜色图归一化是根据数据的最小值和最大值来选择的。使用颜色条进行绘图时,这一点变得清晰。
import matplotlib.pyplot as plt
img_o = plt.imread('1.jpg')
img = plt.imread('2.jpg')
fig, (ax, ax2) = plt.subplots(ncols=2)
plt.gray()
im1 = ax.imshow(img)
fig.colorbar(im1, ax=ax)
im2 = ax2.imshow(img_o)
fig.colorbar(im2, ax=ax2)
plt.show()
从中我们看到,对于第一个图像,白色表示值 70,而第二个白色是 218。要在两种情况下使用相同的归一化,并与 8 位图像保持一致,可以使用norm = plt.Normalize(0,255)
import matplotlib.pyplot as plt
img_o = plt.imread('1.jpg')
img = plt.imread('2.jpg')
norm = plt.Normalize(0,255)
fig, (ax, ax2) = plt.subplots(ncols=2)
plt.gray()
im1 = ax.imshow(img, norm=norm)
fig.colorbar(im1, ax=ax)
im2 = ax2.imshow(img_o, norm=norm)
fig.colorbar(im2, ax=ax2)
plt.show()
或者,您可以将灰度值复制到所有三个 RGB 通道,以便绘制 48x48x3 像素阵列。这将被解释为图像(与彩色映射数据相反)并正确显示。
import numpy as np
import matplotlib.pyplot as plt
img_o = plt.imread('1.jpg')
img = plt.imread('2.jpg')
img_o = np.dstack((img_o,img_o,img_o))
img = np.dstack((img,img,img))
fig, (ax, ax2) = plt.subplots(ncols=2)
im1 = ax.imshow(img)
im2 = ax2.imshow(img_o)
plt.show()
推荐阅读
- r - 如何通过添加两列并赋予其中一个优先级来创建新列?
- javascript - 没有这个的另一个函数内部调用的函数上下文是什么?
- sql-server - Azure 数据库上的慢查询操作
- python - 如果任何数字是英镑,我如何从该输出中获得平均值并将货币转换为欧元?
- java - 为什么我有数组 [] 选项作为构造函数调用?
- rxjs - 等待 Observable 在 Array.Map 内部完成
- botframework - 有什么方法可以知道 Bot Activity 响应是否是最终响应?
- python - 在使用正则表达式搜索功能在 Python 中解析的多个 if 和 for 语句之后未定义变量
- javascript - 带有 2 个按钮的 Jquery 切换侧边栏
- javascript - 绑定到 Angular 中的对象迭代