将图像转换为位图

时间:2017-09-24 02:26:16

标签: 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")

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

Letter "e"

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

有人可以指导我如何获得这个结果吗?

谢谢。

4 个答案:

答案 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.下一步是重新整形并保存。

road.jpg road.bmp

答案 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看起来像enter image description here,阈值30看起来像这个enter image description here,阈值10看起来像这个enter image description here,如果你将其调低到5,输出开始丢失像素:enter image description here

答案 3 :(得分:-1)

使用PIL

from PIL import Image
Image.open("sample1.png").save("sample1.bmp")