cv2.imshow() 和 matplotlib.pyplot.show() 中的灰度图像不同

grayscale image different in cv2.imshow() and matplotlib.pyplot.show()

import cv2 
import numpy as np 
import math
import sys
import matplotlib.pyplot as plt
import utils as ut

imgGray = cv2.imread(imgfile, cv2.IMREAD_GRAYSCALE)
plt.imshow(imgGray, cmap = 'gray')
plt.show() 


cv2.imshow("",imgGray)
cv2.waitKey(0)
cv2.destroyAllWindows()


sys.exit()

plt.show() 结果

cv2.imshow() 结果

我以为他们两个是一样的。但是正如您所看到的,两张图片具有不同的灰度。 似乎 plt.show() 比 cv2.imshow()

如何在 plt.show() 中使灰度与 cv2.imshow() 相同?

Python : 3.9.6

opencv-python : 4.5.3.56

数学绘图库:3.4.3

这是 matplotlib 的行为。它会找到您图片的最小值和最大值,将它们设为黑白,然后缩放介于两者之间的所有内容。

这对于可能具有整数或浮点类型且值范围介于 0.0 和 1.0 或 0 .. 255 或其他任何值之间的任意数据很有用。

OpenCV 没有这种自动缩放。它有固定的规则。如果是浮点数,0.0 是黑色,1.0 是白色。如果是uint8,范围是0 .. 255.