2017-09-24 28 views
2

文字の画像のビットマップのように作成しようとしていますが、希望の結果が得られません。私が画像で作業を始めたのは数日のことでした。私は、イメージを読んで、それの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は黒画素を表す。結果をファイルに保存すると、手紙形式が表示されます。

誰でもこの結果を得る方法を教えてもらえますか?

ありがとうございます。

答えて

1

チェックこの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の配列に変換します。次に、それを3つのベクトルに分割します(チャネルごとに1つ)。私は、灰色のベクトルを作成するために色ベクトルを使用します。その後、128で要素を補完します。0(黒)以外の場合は255です。次の手順は、形を変えて保存します。たくさん助け

road.jpg road.bmp

+0

。ありがとうございました。すべてのビットマップを32x32にリサイズする必要がある場合はどうすればよいですか?どうすればいい? –

+0

イメージを32x32または他の解像度にリサイズするには、イメージをあまり変形させずにフォーマットを失いません。私はこれらの画像のデータセットを作成することができるようにデフォルトの解像度が欲しいです。 –

+0

それはうまくいってうれしいです。申し訳ありませんが、私はこの答えを持っていません。私はテンソルフローを使用しており、opencvでの経験はほとんどありません。私はそれがあなたにとって価値があるかどうかはわかりませんが、あなたのニーズをカバーするライブラリを選択し、それに固執し、問題が発生した場合はstackoverflowで尋ねることをお勧めします。楽しんでください:) – prometeu

1

これを行うには3つのステップが必要です。最初に元の画像をピクセルのリストに変換します。第2に、すべてのピクセルを黒(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の場合はenter image description here、しきい値が30の場合はenter image description here、しきい値が10の場合はenter image description here、調整する場合は5に調整すると出力が失われ始めます。enter image description here

関連する問題