使用 Python 打印图像
Printing Images With Python
我想绘制一个 37x37 的黑白图像,到目前为止,我已经创建了一个矩阵,并希望获得 1 的黑色像素和 0 的白色像素。我不知道哪里出了问题。
import numpy as np
from PIL import Image
cols37 = [1,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1]
rows = []
for i in range (37):
rows.append(cols37)
mura = np.array(rows, dtype = np.bool)
temp = Image.fromarray(mura, '1')
temp.save('my1.png')
temp.open('my1.png')
我目前正在获取这张图片:
相反,我应该得到这样的东西:
这是两个问题造成的
- 用
'1'
指定的选项mode
将获得原始模式'1;8'
,然后它将从numpy数组中解码错误的原始数据,删除选项'1'
将获得原始模式'1'
,结果图像的模式也是 '1'
.
- 行中的相同行数据,因此您将无法按要求获得正确的图像,或者图像中出现十条垂直黑线。
import numpy as np
from PIL import Image
cols37 = [1,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0]
rows = []
for i in range (37):
rows.append(cols37)
mura = np.array(rows, dtype = np.bool)
temp = Image.fromarray(mura) # temp.mode will be `'1'`
或
import numpy as np
from PIL import Image
cols37 = [1,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0]
row_data = [255 if item else 0 for item in cols37]
rows = [row_data for i in range(37)]
mura = np.array(rows, dtype=np.uint8)
temp = Image.fromarray(mura, mode='L')
temp.convert('1')
两个脚本将获得相同的图像
更新:其实cols37
里面只有36个数据,这里我把你的数据从一维数据用NOT+异或运算,变成二维数据,然后得到和你一样的图片。
import numpy as np
from PIL import Image
cols36 = [1,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1]
row = cols36 + cols36[::-1]
rows = []
for y in range(72):
line = []
for x in range(72):
line.append(not(row[x] != row[y]))
rows.append(line)
line = []
mura = np.array(rows, dtype = np.bool)
im = Image.fromarray(mura) # temp.mode will be `'1'`
im.show()
我想绘制一个 37x37 的黑白图像,到目前为止,我已经创建了一个矩阵,并希望获得 1 的黑色像素和 0 的白色像素。我不知道哪里出了问题。
import numpy as np
from PIL import Image
cols37 = [1,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1]
rows = []
for i in range (37):
rows.append(cols37)
mura = np.array(rows, dtype = np.bool)
temp = Image.fromarray(mura, '1')
temp.save('my1.png')
temp.open('my1.png')
我目前正在获取这张图片:
相反,我应该得到这样的东西:
这是两个问题造成的
- 用
'1'
指定的选项mode
将获得原始模式'1;8'
,然后它将从numpy数组中解码错误的原始数据,删除选项'1'
将获得原始模式'1'
,结果图像的模式也是'1'
. - 行中的相同行数据,因此您将无法按要求获得正确的图像,或者图像中出现十条垂直黑线。
import numpy as np
from PIL import Image
cols37 = [1,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0]
rows = []
for i in range (37):
rows.append(cols37)
mura = np.array(rows, dtype = np.bool)
temp = Image.fromarray(mura) # temp.mode will be `'1'`
或
import numpy as np
from PIL import Image
cols37 = [1,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1,0]
row_data = [255 if item else 0 for item in cols37]
rows = [row_data for i in range(37)]
mura = np.array(rows, dtype=np.uint8)
temp = Image.fromarray(mura, mode='L')
temp.convert('1')
两个脚本将获得相同的图像
更新:其实cols37
里面只有36个数据,这里我把你的数据从一维数据用NOT+异或运算,变成二维数据,然后得到和你一样的图片。
import numpy as np
from PIL import Image
cols36 = [1,0,1,1,0,0,1,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,1,1,1,0,1,0,0,1,1,0,1]
row = cols36 + cols36[::-1]
rows = []
for y in range(72):
line = []
for x in range(72):
line.append(not(row[x] != row[y]))
rows.append(line)
line = []
mura = np.array(rows, dtype = np.bool)
im = Image.fromarray(mura) # temp.mode will be `'1'`
im.show()