文字の画像のビットマップのように作成しようとしていますが、希望する結果が得られません。画像を使い始めてから数日が経ちました。画像を読み取って、その画像の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は黒いピクセルを表します。次に、結果をファイルに保存すると、文字の形式が表示されます。
誰かがこの結果を得る方法について私を導くことができますか?
ありがとうございました。
これをチェックしてください:
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配列に変換します。次に、チャネルごとに1つずつ、3つのベクトルに分割します。色ベクトルを使用して灰色のベクトルを作成します。その後、書き込みよりも低い場合は128の要素と競合します0(black)それ以外の場合は255です。次のステップは形状を変更して保存します。
枕が使えます
from PIL import Image
img = Image.open("haha.jpg")
img = img.tobitmap()
それを行うには3つのステップが必要です。まず、元の画像をピクセルのリストに変換します。次に、すべてのピクセルを黒(0,0,0)または白(255,255,255)に変更します。 3番目に、リストを画像に変換して保存します。
コード:
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に調整すると、出力はピクセルを失い始めます: 。