Python matplotlib imsave模糊,但imshow正确显示图像

Python matplotlib imsave模糊,但imshow正确显示图像,python,image,matplotlib,computer-vision,Python,Image,Matplotlib,Computer Vision,我试图将img的一些像素重新映射到灰度图像label\u pix上的不同灰度级。映射和for循环是无关的,可以忽略。基本上,转换后的图像应该只有由映射中的一个值指定的像素plt.imshow和plt.show一起显示具有正确像素值的所需图像,但plt.imsave会模糊颜色边界上的输出图像。有些像素高达17和18 import matplotlib.pyplot as plt import matplotlib.image as mpimg mapping = { (0.0, 0.0,

我试图将
img
的一些像素重新映射到灰度图像
label\u pix
上的不同灰度级。映射和for循环是无关的,可以忽略。基本上,转换后的图像应该只有由
映射中的一个值指定的像素
plt.imshow
plt.show
一起显示具有正确像素值的所需图像,但
plt.imsave
会模糊颜色边界上的输出图像。有些像素高达17和18

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

mapping = {
    (0.0, 0.0, 0.0): 0,
    (0.0, 0.502, 0.0): 1,
    (0.502, 0.502, 0.502): 4,
    (0.502, 0.0, 0.502): 4,
    (0.0, 0.753, 0.0): 5,
    (0.502, 0.753, 0.0): 6,
    (0.753, 0.0, 0.0): 8,
    (0.251, 0.502, 0.502): 11,
    (0.753, 0.0, 0.502): 12,
    (0.753, 0.502, 0.502): 13
}

img = mpimg.imread('djt.png')
label_pix = [[0 for _ in __] for __ in img]
for i in range(len(img)):
    for j in range(len(img[0])):
        key = list(map(lambda v: round(v, 3), img[i][j]))
        for v in range(len(key)):
            if abs(key[v]) < 0.00001:
                key[v] = 0
            elif abs(key[v] - 0.251) < 0.00001:
                key[v] = 0.251
            elif abs(key[v] - 0.502) < 0.00001:
                key[v] = 0.502
            elif abs(key[v] - 0.753) < 0.00001:
                key[v] = 0.753
        key = tuple(key)
        m = mapping[key]
        if m > 13:
            raise Exception('WTF?') # this never gets raised
        label_pix[i][j] = mapping[key]

print('Done!')
plt.imshow(label_pix)
plt.imsave('djtmarked.jpg', label_pix, cmap='gray', vmin=0, vmax=255)

plt.show()
导入matplotlib.pyplot作为plt
将matplotlib.image导入为mpimg
映射={
(0.0, 0.0, 0.0): 0,
(0.0, 0.502, 0.0): 1,
(0.502, 0.502, 0.502): 4,
(0.502, 0.0, 0.502): 4,
(0.0, 0.753, 0.0): 5,
(0.502, 0.753, 0.0): 6,
(0.753, 0.0, 0.0): 8,
(0.251, 0.502, 0.502): 11,
(0.753, 0.0, 0.502): 12,
(0.753, 0.502, 0.502): 13
}
img=mpimg.imread('djt.png')
label_pix=[[0表示img中的uuu]表示img中的uuu]
对于范围内的i(len(img)):
对于范围内的j(len(img[0]):
键=列表(图(λv:round(v,3),img[i][j]))
对于范围内的v(透镜(键)):
如果abs(键[v])<0.00001:
键[v]=0
elif abs(键[v]-0.251)<0.00001:
键[v]=0.251
elif abs(键[v]-0.502)<0.00001:
键[v]=0.502
elif abs(键[v]-0.753)<0.00001:
键[v]=0.753
key=元组(key)
m=映射[键]
如果m>13:
引发异常(“WTF”)#此异常从未引发
label_pix[i][j]=映射[key]
打印('Done!')
plt.imshow(标签为pix)
plt.imsave('djtmarked.jpg',label_pix,cmap='gray',vmin=0,vmax=255)
plt.show()
有人能帮我吗?如何保证
plt.imsave
为图像保留100%的质量