我正在尝试为字母图像创建一个位图,但我没有得到理想的结果。我开始使用图像已经有好几天了。我试图读取图像,创建一个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")
我正在尝试使用以下链接中的图像:
我试图创建一个0和1的数组。其中0表示白色像素,1表示黑色像素。然后,当我将结果保存在文件中时,我可以看到字母格式。
有人可以指导我如何获得这个结果吗?
谢谢。
答案 0 :(得分:4)
检查一下:
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')
该程序采用rgb图像并将其转换为numpy数组。然后它将它分成3个向量,每个通道一个。我使用颜色矢量来创建灰色矢量。之后它会用128表示元素,如果低于写入0(黑色),则为255.下一步是重新整形并保存。
答案 1 :(得分:3)
您可以使用枕头
from PIL import Image
img = Image.open("haha.jpg")
img = img.tobitmap()
答案 2 :(得分:1)
这需要三个步骤。首先将原始图像转换为像素列表。第二个将每个像素更改为黑色(0,0,0)或白色(255,255,255)。第三,将列表转换回图像并保存。
代码:
from PIL import Image
threshold = 10
# convert image to a list of pixels
img = Image.open('letter.jpg')
pixels = list(img.getdata())
# convert data list to contain only black or white
newPixels = []
for pixel in pixels:
# if looks like black, convert to black
if pixel[0] <= threshold:
newPixel = (0, 0, 0)
# if looks like white, convert to white
else:
newPixel = (255, 255, 255)
newPixels.append(newPixel)
# create a image and put data into it
newImg = Image.new(img.mode, img.size)
newImg.putdata(newPixels)
newImg.save('new-letter.jpg')
threshold
决定像素是黑色还是白色,因为您可以看到代码。阈值50看起来像,阈值30看起来像这个,阈值10看起来像这个,如果你将其调低到5,输出开始丢失像素:。
答案 3 :(得分:-1)
使用PIL
from PIL import Image
Image.open("sample1.png").save("sample1.bmp")