cv2.imshow与matplotlib.pyplot.show显示灰度图效果不同如何解决?
灰度显示效果不一致的原因
两者的灰度值映射逻辑存在差异:
cv2.imshow()对8位灰度图采用固定映射逻辑:像素值0固定对应纯黑,255固定对应纯白,和图像本身的像素分布无关。plt.imshow()默认采用动态适配的映射逻辑:会自动取输入图像的像素最小值作为vmin(映射为纯黑)、像素最大值作为vmax(映射为纯白),如果图像像素没有覆盖0~255的完整区间,就会出现显示偏差。
解决方法
调用plt.imshow()时显式指定vmin=0、vmax=255即可强制和OpenCV的映射逻辑对齐,修改后的代码如下:
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) # 显式指定vmin和vmax参数对齐OpenCV显示规则 plt.imshow(imgGray, cmap = 'gray', vmin=0, vmax=255) plt.show() cv2.imshow("",imgGray) cv2.waitKey(0) cv2.destroyAllWindows() sys.exit()
内容的提问来源于stack exchange,提问作者HyunYoung Go
相关产品推荐
相关产品推荐

