0
jpgを開き、画像の特定の部分に行き、その部分を抽出するPythonコードを作成しています。コードは特定のサイズの四角形を取り、それを28×28に圧縮することを目的としています。私のコードでは、以下のように出力されます。出力には、28回のデータ行が表示されます。私は出力が変化すると期待していますが、出力は変化しません。私はこれが誰かが簡単に見つけられるものだったと思っていました。どんな助けもありがとう。ありがとう。python pilライブラリ呼び出しと繰り返しデータを返すメソッド
def start_here(self):
... # x,y,w,h are all valid
filename = "some valid filename"
img = self.look_at_img(filename,x,y,w,h)
self.print_block(img)
def look_at_img(self, filename, x = 0, y = 0, width = 28, height = 28):
img = Image.open(open(filename))
size = 28, 28
img2 = [[0] * 28] * 28
oneimg = []
mnist_dim = 28
multx = width/float(mnist_dim)
multy = height/float(mnist_dim)
xy_list = []
dimx, dimy = img.size
#img = np.asarray(img, dtype='float64')
''' Put in shrunk form. '''
if not len (img.shape) < 3 :
if not (x + width > dimx and y + height > dimy) :
for aa in range(28) :
for bb in range(28) :
astart = x + aa * multx
bstart = y + bb * multy
#print astart, bstart
if True :
item = [ aa, bb, list(img.getpixel((int(astart) ,int(bstart))))]
xy_list.append(item)
''' Put list in 28 x 28 array. '''
if len(xy_list) == 0:
xy_list = [[0, 0,[0,0,0]]]
for i in range(len(xy_list)):
q = xy_list[i]
if i < 10: print(q)
if (q[0] < 28) and (q[1] < 28) and (q[0] >= 0) and (q[1] >= 0) :
img2[int(q[0])] [ int(q[1])] = q[2][0]
''' Then add entire array to oneimg variable and flatten.'''
for yz in range(28):
for xz in range(28):
oneimg.append(img2[yz][xz])
return oneimg
def print_block(self, img):
#print (img)
for x in range(28):
for y in range(28):
out = str(img[x *28 + y]) +" "
sys.stdout.write(out)
print "|"
print "---------------"
出力の一部を以下に含まれています
[0, 0, [90, 75, 70]]
[0, 1, [85, 77, 66]]
[0, 2, [87, 73, 70]]
[0, 3, [88, 74, 73]]
[0, 4, [86, 73, 64]]
[0, 5, [91, 77, 68]]
[0, 6, [89, 74, 69]]
[0, 7, [86, 73, 65]]
[0, 8, [87, 72, 65]]
[0, 9, [86, 72, 63]]
45 35 48 61 62 61 95 91 94 88 92 93 87 98 178 194 116 98 90 91 92 85 84 88 88 90 91 92 |
45 35 48 61 62 61 95 91 94 88 92 93 87 98 178 194 116 98 90 91 92 85 84 88 88 90 91 92 |
45 35 48 61 62 61 95 91 94 88 92 93 87 98 178 194 116 98 90 91 92 85 84 88 88 90 91 92 |
... more repeated values ...
EDIT:これらは私の輸入品の一部です
import numpy as np
from PIL import Image
import os
import sys
EDIT:私は、コードを変更し、更新をいくつか出力します。私はprint (q)
行のリストがテーブルの数字と一致しない理由を理解できません。
に使用するために必要なnumpyの配列*がOKであることを*そうです。 –
私は、下記のように 'getpixel()'を使ってコードを再作成しようとしましたが、私はほぼ同じ出力を得ました[link](http://pillow.readthedocs.io/ja/3.4.x/reference/Image.html# PIL.Image.Image.getpixel)私の新しい出力はすべてintですが、前と同じように繰り返されます。 –
少し質問を編集しました。 –