如何在Python中保存灰度图像?

Sid*_*thy 0 python opencv image-processing matplotlib

我正在尝试使用matplotlib savefig()保存灰度图像。我发现使用matplotlib savefig()之后保存的png文件与代码运行时显示的输出图像有些不同。代码运行时生成的输出图像包含的详细信息比保存的图形还多。

如何以所有细节都存储在输出图像中的方式保存输出图?

我的代码如下:

import cv2
import matplotlib.pyplot as plt

plt.figure(1)
img_DR = cv2.imread(‘image.tif',0)
edges_DR = cv2.Canny(img_DR,20,40)
plt.imshow(edges_DR,cmap = 'gray')
plt.savefig('DR.png')
plt.show()
Run Code Online (Sandbox Code Playgroud)

输入文件('image.tif')可以在这里找到。

以下是代码运行时生成的输出图像:

在此处输入图片说明

以下是保存的图像:

在此处输入图片说明

尽管上述两个图像表示同一张图片,但您可以注意到它们略有不同。敏锐地观察两个图像的圆形边缘,表明它们是不同的。

Ste*_*eve 5

既然您使用 cv2 加载图像,为什么不也使用它来保存它。我认为您正在寻找的命令是:

cv2.imwrite('gray.jpg', gray_image)


ray*_*ica 5

将实际图像保存到文件中,而不是该图。图形与您根据处理实际创建的图像之间的DPI将有所不同。由于您使用的是OpenCV,请使用cv2.imwrite。在您的情况下:

cv2.imwrite('DR.png', edges_DR)
Run Code Online (Sandbox Code Playgroud)

使用PNG格式是因为JPEG有损,因此会降低质量,从而无法缩小文件大小。如果精度是关键,请使用无损压缩标准,PNG就是一个例子。


如果您某种程度上反对使用OpenCV,则Matplotlib有一种等效的图像写入方法,称为imsave,其语法与cv2.imwrite:

plt.imsave('DR.png', edges_DR, cmap='gray')
Run Code Online (Sandbox Code Playgroud)

请注意,我正在将颜色映射强制为灰度,imsave因为它不会像OpenCV如何将图像写入文件那样自动推断出来。