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

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

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

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

Q&A

解決済

1回答

1758閲覧

PILのImageOpsの機能が動作しません。

Joe64532923

総合スコア5

Python

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

0グッド

0クリップ

投稿2019/09/05 03:44

Python3.7、PILを使用

 PILを使ってPycarmで簡単な画像加工アプリを作成しているのですが、いくつかの機能が作動しません。原因は何でしょうか。

発生している問題・エラーメッセージ

ソースコードの中の「# それぞれのボタンを押すと変換操作する」のうち「if i == 1:」の画像の左右反転、「elif i == 3:」の画像のぼかしの機能が動作しません。

###該当のソースコード

python

1# 画像を読み込んでからボタンを押して画像を変換する 2from tkinter import * 3import tkinter.filedialog as tkfd 4import PIL.Image 5import PIL.ImageTk 6import PIL.ImageOps 7import PIL.ImageEnhance 8 9 10class App(Frame): 11 12 def quit(self, event): 13 self.master.destroy() 14 15 def open(self, event): 16 # ファイルダイアログ呼ぶ 17 filename = tkfd.askopenfilename() 18 19 # ファイルを選ぶ。画像以外を選ぶとコンソールに画像を選べと言ってくる 20 try: 21 img = PIL.Image.open(filename) 22 #  画像サイズは上下か左右のうち大きい方を500にする 23 img.thumbnail((500, 500)) 24 self.img = img 25 if img.mode == "1": # bitmap image 26 self.image1 = PIL.ImageTk.BitmapImage(img, foreground="white") 27 else: # photo image 28 self.image1 = PIL.ImageTk.PhotoImage(img) 29 self.la.config(image=self.image1, 30 width=self.image1.width(), height=self.image1.height()) 31 except: 32 print('画像を選べ') 33 34 def callback(self, i): 35 def x(): 36 # クリックされた時だけ作動する 37 try: 38 # 画像を選んだ状態に作動するそれ以外では何もしない 39 # それぞれのボタンを押すと変換操作する 40 if i == 0: 41 im = self.img.convert('L') 42 elif i == 1: 43 im = self.ImageOps.mirror(img) 44 elif i == 2: 45 im = self.img.point(lambda x: x * 1.5) 46 elif i == 3: 47 im = self.ImageEnhance.Sharpness(img) 48 im.enhance(0.0) 49 else: 50 im = self.img 51 self.image2 = PIL.ImageTk.PhotoImage(im) 52 self.la.config(image=self.image2, 53 width=self.image2.width(), height=self.image2.height()) 54 except: 55 pass 56 57 return x 58 59 def init(self): 60 ga = Label(self, text='下をクリックして画像を選ぶ!', width=30).grid(row=0, column=0) 61 self.image1 = PhotoImage() 62 la = self.la = Label(self, image=self.image1, bg="green", 63 width=500, height=50) 64 la.bind("<Button-1>", self.open) 65 la.bind("<Button-3>", self.quit) 66 la.grid(row=1, column=0) 67 68 buttons = [] 69 #  画像変換メニューをリストに入れておく 70 bt_name = ['白黒', '左右反転', '明るく','ピンぼけ修正','初期画像'] 71 for i in range(5): 72 # ボタンを作成して、リストの中の要素をテキストとして表示 73 buttons.append(Button(anchor=W, width=30, text=bt_name[i], command=self.callback(i))) 74 buttons[i].grid(row=i, column=0) 75 76 def __init__(self, master=None): 77 Frame.__init__(self, master) 78 self.master.title('画像変換アプリ') 79 self.init(); 80 self.grid() 81 82 83if __name__ == "__main__": 84 app = App() 85 app.mainloop()

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

左右反転が機能しない理由

処理対象の画像は self.img

diff

1- im = PIL.ImageOps.mirror(img) 2+ im = PIL.ImageOps.mirror(self.img)

ピンぼけ修正の機能が機能しない理由

PIL.ImageEnhance モジュールの使い方が間違っているため。

diff

1- im = self.ImageEnhance.Sharpness(img) 2- im.enhance(0.0) 3+ enhancer = PIL.ImageEnhance.Sharpness(self.img) 4+ enhancer.enhance(0.0)

以下を参考にしてください。

Pillow (PIL) - ImageEnhance モジュールで画像の明るさ、コントラストなどを変更する方法 - Pynote

投稿2019/09/05 04:18

tiitoi

総合スコア21956

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

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

Joe64532923

2019/09/05 05:34 編集

丁寧に回答していただき、ありがとうございます。 参考になりました。
tiitoi

2019/09/05 05:03

ピンぼけを修正するということは、画像を鮮鋭化する処理を行うということなので、enhance のパラメータは1より大きい値にするべきではないでしょうか。例えば、 enhancer.enhance(5.0) としてみてください。
Joe64532923

2019/09/05 05:35

最後までありがとうございます。 参考になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問