Lenna压缩保存全黑python
Lenna compression save all black python
所以我有这段代码使用高位第四位将 lena.tif 图像压缩为黑白图像。我的问题出现在保存图片的时候,最后的结果全黑了,不知道为什么。
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
x_img = Image.open("lenac.tif")
x_gray = x_img.convert("L")
x = np.array(x_gray)
for i in range(0,4):
y = x > (2**(7-i))-1
z = x - y * (2**(7-i))
x = z
new_img = Image.fromarray(y.astype('uint8'),'L')
plt.imshow(new_img, cmap='gray')
new_img.save("lena_4 .bmp")
y
是一个布尔数组。因此,当您将其转换为 uint8
时,您的值都是 0 或 1。
但是当您从 y
创建 Image
时,您指定模式 'L'
,即 8 bits per pixel。
因此您可以简单地将像素缩放到 8 位范围:
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
x_img = Image.open("lenac.tif")
x_gray = x_img.convert("L")
x = np.array(x_gray)
for i in range(0,4):
y = x > (2**(7-i))-1
z = x - y * (2**(7-i))
x = z
y = y.astype('uint8') * 255 # This scales the pixel values
new_img = Image.fromarray(y ,'L') # Use y here instead of y.astype(...)
plt.imshow(new_img, cmap='gray')
#plt.show()
new_img.save("lena_4.bmp")
输出:
最终图像并非全黑。它只是非常暗,因为所有像素都是 0(黑色)或 1(几乎是黑色)。毕竟,y
不是 0 就是 1(False 或 True)。 imshow
缩放范围,以便您看到的东西不像实际那样黑。确定是y
需要转成图片吗?
顺便说一下,z
是不必要的。将循环中的行写为 x = x - y * (2**(7-i))
所以我有这段代码使用高位第四位将 lena.tif 图像压缩为黑白图像。我的问题出现在保存图片的时候,最后的结果全黑了,不知道为什么。
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
x_img = Image.open("lenac.tif")
x_gray = x_img.convert("L")
x = np.array(x_gray)
for i in range(0,4):
y = x > (2**(7-i))-1
z = x - y * (2**(7-i))
x = z
new_img = Image.fromarray(y.astype('uint8'),'L')
plt.imshow(new_img, cmap='gray')
new_img.save("lena_4 .bmp")
y
是一个布尔数组。因此,当您将其转换为 uint8
时,您的值都是 0 或 1。
但是当您从 y
创建 Image
时,您指定模式 'L'
,即 8 bits per pixel。
因此您可以简单地将像素缩放到 8 位范围:
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
x_img = Image.open("lenac.tif")
x_gray = x_img.convert("L")
x = np.array(x_gray)
for i in range(0,4):
y = x > (2**(7-i))-1
z = x - y * (2**(7-i))
x = z
y = y.astype('uint8') * 255 # This scales the pixel values
new_img = Image.fromarray(y ,'L') # Use y here instead of y.astype(...)
plt.imshow(new_img, cmap='gray')
#plt.show()
new_img.save("lena_4.bmp")
输出:
最终图像并非全黑。它只是非常暗,因为所有像素都是 0(黑色)或 1(几乎是黑色)。毕竟,y
不是 0 就是 1(False 或 True)。 imshow
缩放范围,以便您看到的东西不像实际那样黑。确定是y
需要转成图片吗?
顺便说一下,z
是不必要的。将循环中的行写为 x = x - y * (2**(7-i))