Python PyPlot与OpenCV imshow中的工件

Python PyPlot与OpenCV imshow中的工件,python,opencv,matplotlib,image-processing,Python,Opencv,Matplotlib,Image Processing,我有一张灰度图像,格式为numpyarray格式(标准OpenCV格式)。正常图像,uint8,所有值都在0和255之间。当我跑步时: import cv2 cv2.imshow('', image) from matplotlib import pyplot pyplot.imshow(image, cmap="gray") pyplot.show() 我得到: 但当我跑步时: import cv2 cv2.imshow('', image) from matplotlib impor

我有一张灰度图像,格式为
numpy
array格式(标准OpenCV格式)。正常图像,
uint8
,所有值都在0和255之间。当我跑步时:

import cv2
cv2.imshow('', image)
from matplotlib import pyplot
pyplot.imshow(image, cmap="gray")
pyplot.show()
我得到:

但当我跑步时:

import cv2
cv2.imshow('', image)
from matplotlib import pyplot
pyplot.imshow(image, cmap="gray")
pyplot.show()
我得到:


真正奇怪的是,如果我调整
pyplot
图像窗口的大小,这些线条瑕疵的宽度会改变。这是怎么回事?我不知道它显示了什么这些瑕疵。

要删除alaising效果,您可以添加一个抗锯齿过滤器:

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

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

请注意,如果要使用matplotlib显示灰度图像,必须正确指定值范围。在您的示例中,最亮的像素值为233,如果不指定
vmin
vmax
,则该值将映射到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()


据我所知,文档中有说明,这些线条在图像中,即使使用opencv显示,也只是有点模糊。这看起来像是锯齿。我假设图像大于屏幕像素:。您可能可以通过
imshow(image,interpolation='hanning')
摆脱大部分内容。您可以链接原始图像吗?@JodyKlymak是的,这似乎是问题所在汉宁把它修好了。你能把这个写在回信里让我接受吗?