質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1328閲覧

画像を8x8に変換するにはどのようにしたらよいでしょうか。

kuromaru200

総合スコア5

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2020/10/12 05:02

編集2020/10/13 12:48

Python初心者です。

参考書のコードを書き写したのですが、
ファイルから画像を選択すると
下図のように表示されません。

画像を8x8(下図)で表示するにはどのように良いでしょうか。
ご教示いただけますと幸いです。

イメージ説明

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
(以下、書き写したコードです。)

import tkinter as tk
import tkinter.filedialog as fd
import PIL.Image
import PIL.ImageTk
import sklearn.datasets
import sklearn.svm
import numpy

def imageToData(filename):
grayImage = PIL.Image.open(filename).convert("L")
grayImage = grayImage.resize((8,8),PIL.Image.ANTIALIAS)
dispImage = PIL.ImageTk.PhotoImage(grayImage.resize((300,300)))
imageLabel.configure(image = dispImage)
imageLabel.image = dispImage
numImage = numpy.asarray(grayImage, dtype = float)
numImage = numpy.floor(16 - 16 * (numImage / 256))
numImage = numImage.flatten()
return numImage

def predictDigits(data):
digits = sklearn.datasets.load_digits()
clf = sklearn.svm.SVC(gamma=0.001)
clf.fit(digits.data, digits.target)
n = clf.predict([data])
textLabel.configure(text = "この画像は"+str(n)+"です!")

def openFile():
fpath = fd.askopenfilename()
if fpath:
data = imageToData(fpath)
predictDigits(data)

root = tk.Tk()
root.geometry("400x400")

btn = tk.Button(root, text="ファイルを開く", command = openFile)
imageLabel = tk.Label()
btn.pack()
imageLabel.pack()

textLabel = tk.Label(text="手書きの数字を認識します!")
textLabel.pack()

tk.mainloop()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2020/10/12 05:32

imageToDataメソッドの中の、grayImage = grayImage.resize((8,8),PIL.Image.ANTIALIAS) の行の実行が終わった時点で、変数grayImageに 8x8 ピクセルの画像が入っていると思われますから、その次の行で grayImageを表示してみてはどうですか? 質問の文章では、プログラム中のどのデータ(どの変数)を 8x8 ピクセルで表示したいのかが判りませんでした。 もう少し何がしたいのかを具体的に説明すると、適切な回答が得られる可能性が高まります。
kuromaru200

2020/10/12 05:47

ご回答いただきありがとうございます。 拙い質問文となってしまい申し訳ございません。 一度、アドバイスを基に修正してみます!
kuromaru200

2020/10/13 12:51

返信が遅れて大変申し訳ありません。 何度かコードを書き直したのですが、どうしてもうまくいきませんでした。 表したい結果を質問内に示させていただきました。 もし可能であれば正しいコードをご教示いただけますと幸いです。 何卒よろしくお願いいたします。
coco_bauer

2020/10/15 03:16

質問にある画像のように表示するには、表示する場所の縦と横のピクセル数を8の倍数にする(質問のコードのように400x400とか)。 それを64分割(縦に8分割、横に8分割)した正方形領域のそれぞれに、8x8の画像の各ピクセルのデータ(色)を設定する。 8x8の画像の左上のピクセルの色が 128 (灰色)だとすれば、[0,0],[24,0],[0,24],[24,24]を頂点とする領域のピクセルの色を128に設定します。 そうすれば、8x8の画像を25倍に拡大した質問の画像のようになります。
kuromaru200

2020/10/16 09:45

丁寧にご教示いただきありがとうございます。 アドバイスを基に、もう一度挑戦いたします!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問