将图像转换为位图

Leo*_*one 3 python numpy computer-vision scikit-image

我正在尝试为字母的图像创建像位图一样的格式,但是我没有期望的结果。我开始使用图像已经过了几天。我试图读取图像,为其创建一个numpy数组,然后将内容保存在文件中。我写了下面的代码:

import numpy as np
from skimage import io
from skimage.transform import resize

image = io.imread(image_path, as_grey=True)
image = resize(image, (28, 28), mode='nearest')
array = np.array(image)
np.savetxt("file.txt", array, fmt="%d")
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用以下链接中的图像:

字母“ e”

我试图创建一个0和1的数组。其中0代表白色像素,而1代表黑色像素。然后,当我将结果保存到文件中时,我可以看到字母格式。

谁能指导我如何获得此结果?

谢谢。

pro*_*teu 5

看看这个:

from PIL import Image
import numpy as np

img = Image.open('road.jpg')
ary = np.array(img)

# Split the three channels
r,g,b = np.split(ary,3,axis=2)
r=r.reshape(-1)
g=r.reshape(-1)
b=r.reshape(-1)

# Standard RGB to grayscale 
bitmap = list(map(lambda x: 0.299*x[0]+0.587*x[1]+0.114*x[2], 
zip(r,g,b)))
bitmap = np.array(bitmap).reshape([ary.shape[0], ary.shape[1]])
bitmap = np.dot((bitmap > 128).astype(float),255)
im = Image.fromarray(bitmap.astype(np.uint8))
im.save('road.bmp')
Run Code Online (Sandbox Code Playgroud)

该程序获取一个rgb图像并将其转换为numpy数组。然后将其分成3个向量,每个通道一个。我使用颜色矢量来创建灰色矢量。此后,它将对元素进行128填充,如果小于,则写入0(黑色),否则为255。下一步是重塑形状并保存。

road.jpg road.bmp

  • `list(map(lambda x: 0.299*x[0]+0.587*x[1]+0.114*x[2], zip(r,g,b)))` 在 numpy 中可以更快地完成。它只是“0.299 * r + 0.587 * g + 0.114 * b”。否则,这是一个非常好的答案。 (2认同)

Aad*_*oel 5

你可以用枕头

from PIL import Image

img = Image.open("haha.jpg")
img = img.tobitmap()
Run Code Online (Sandbox Code Playgroud)