PyPlot与OpenCV imshow中的伪像

时间:2019-04-26 02:18:43

标签: python opencv matplotlib image-processing

我有一个numpy数组格式(标准OpenCV格式)的灰度图像。正常图像uint8,所有值都在0到255之间。运行时:

import cv2
cv2.imshow('', image)

我得到:

enter image description here

但是当我跑步时:

from matplotlib import pyplot
pyplot.imshow(image, cmap="gray")
pyplot.show()

我得到:

enter image description here

真正令人奇怪的是,如果我调整pyplot图像窗口的大小,这些线条伪像的宽度就会改变。这是怎么回事?我不知道它在显示这些工件。

2 个答案:

答案 0 :(得分:1)

要消除模糊效果,您可以添加抗锯齿滤镜:

from matplotlib import pyplot
pyplot.imshow(image, cmap="gray", interpolation='hanning')
pyplot.show()

在这种情况下,它不是真正的插值,而是平滑原始数据。

答案 1 :(得分:0)

请注意,当您要使用matplotlib显示灰度图像时,必须正确指定值范围。在您的示例中,最亮的像素值为233,如果您未指定vminvmax,它将被映射为255。这将使图像看起来比实际的更亮。

import matplotlib.pyplot as plt
import cv2

image = cv2.imread("example2.png")[:,:,0]
fig = plt.figure()
ax1, ax2 = fig.subplots(1,2)
ax1.axis("off")
ax2.axis("off")

ax1.imshow(image, cmap="gray") # rescales value range
ax2.imshow(image, cmap="gray",vmin = 0, vmax = 255) # proper way
plt.show()

enter image description here

在文档here

中有说明