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

e4yzc0pl  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(92)
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()结果
x1c 0d1x的数据
cv2.imshow()结果



我原以为这两张图片是一样的。但是正如你所看到的,两张图片有不同的灰度。看起来plt.show()比cv2.imshow()暗
如何使plt.show()中的灰度与cv2.imshow()中的灰度相同?
Python:3.9.6
opencv-python:4.5.3.56
mathplotlib:3.4.3

uemypmqf

uemypmqf1#

这是matplotlib的行为。它找到你的图片的最小值和最大值,使那些黑色和白色,并缩放之间的一切。
这对任意数据都很有用,这些数据可能是整数或浮点类型,值范围在0.0和1.0之间,或0..255之间,或其他任何值。
vminvmax参数的You can set those limits yourself

plt.imshow(imgGray, cmap='gray', vmin=0, vmax=255) # if your data ranges is uint8

字符串
OpenCV没有这样的自动缩放。它有固定的规则。如果它是浮点数,0.0是黑色,1.0是白色。如果它是uint 8,范围是0.. 255。
要在OpenCV中获得这种自动范围,您必须在显示之前缩放数据:

normalized = cv.normalize(
    data, alpha=0.0, beta=1.0, norm_type=cv.NORM_MINMAX, dtype=cv.CV_32F)

相关问题