与OpenCV相比,Matplotlib imshow的质量较低

与OpenCV相比,Matplotlib imshow的质量较低,opencv,matplotlib,Opencv,Matplotlib,我正在用python做一些计算机视觉,所以我同时使用opencv和matplotlib。我想切换到matplotlib查看图像,但我发现与OpenCVimshow相比,图像质量较低,而且图像在屏幕上显示的大小也不正确,它们的大小都相同 这就是我过去的习惯 img = cv2.imread('a.png',0) f = plt.figure(figsize=(img.shape[1],img.shape[0]), dpi=1) plt.axes([0,0,1,1]) plt.axis('false

我正在用python做一些计算机视觉,所以我同时使用opencv和matplotlib。我想切换到matplotlib查看图像,但我发现与OpenCV
imshow
相比,图像质量较低,而且图像在屏幕上显示的大小也不正确,它们的大小都相同

这就是我过去的习惯

img = cv2.imread('a.png',0)
f = plt.figure(figsize=(img.shape[1],img.shape[0]), dpi=1)
plt.axes([0,0,1,1])
plt.axis('false')
plt.imshow(img,cmap="gray",interpolation=None)
我尝试使用不同的插值值,但与opencv相比,质量仍然很低。是否可以以更好的质量显示图像


另外,在打印时,我会得到同样的低质量,这与opencv写入方法不同。

您使图形尺寸过大。返回img中的行数和列数,但使用英寸


此外,您可能希望图形的分辨率与dpi=1不同。每英寸点数应该更接近80,并且可能需要更高,具体取决于图像的显示方式

嗯,
dpi=1
将使每英寸有1个像素,因此我可以使用图像像素作为图形大小,因为现在像素=英寸,所以至少当我显示图像时,我认为dpi与图像质量无关(可能是写在轴上的文本等)。无论如何,我发现制作
interpolation='none'
not
none
的质量要好得多。通过使用
figaspect(img)
根据当前dpi的图像大小获得英寸,我可以绕过
dpi=1
的问题,同时我仍然可以正确显示文本。