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

e4yzc0pl  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(238)
  1. import cv2
  2. import numpy as np
  3. import math
  4. import sys
  5. import matplotlib.pyplot as plt
  6. import utils as ut
  7. imgGray = cv2.imread(imgfile, cv2.IMREAD_GRAYSCALE)
  8. plt.imshow(imgGray, cmap = 'gray')
  9. plt.show()
  10. cv2.imshow("",imgGray)
  11. cv2.waitKey(0)
  12. cv2.destroyAllWindows()
  13. 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

  1. 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中获得这种自动范围,您必须在显示之前缩放数据:

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

相关问题