tkinterとOpenCVを組み合わせて、マウスクリックで画像の縮小(リサイズ)をできるアプリを作ってみる
※初心者向けにpythonの勉強法とその手順を記事にしました。
1. はじめに
以前、OpenCVを用いて画像をリサイズする方法を紹介しました。
今回はTkinterと組み合わせて、マウス操作のみで簡単に画像をリサイズできるアプリを作ります。
画像の大きさは、まずははてなブログでも使いやすい600×400にします。
(※そのうち画像の大きさ等もユーザーが任意に変えられる仕様にしたい思います。)
2. コードと実行結果
2.1 コード
2.2 実行結果
上記を実行すると、次の画面が出てきます。
右の開くボタンを押して、リサイズしたい画像を選択します。マウスクリックやドラックで複数の画像を選択できます。
右下の開くを押すと処理が始まり、デスクトップに新しいフォルダが作成されます。フォルダ名は処理を開始した時の日時です。
フォルダ開くと、画像ファイルの名前にresizeがつきます。
ファイルのサイズを見ると数十~数百kbと小さくなっており、確かにリサイズされていることが分かります。
また処理が完了するとメッセージも現れます。
3. 説明
3.1 前準備
プログラミング環境はAnacondaを使用しています。またAnacondaにはOpenCVが入ってないので、pipを用いてインストールしています。詳しくは過去記事を見て下さい。
またコード内に所々(ユーザー名)とあります。こちらにはお使いのPC名を入れて下さい。
確認するには、ファイルをクリックして、PC⇒ローカルディスク(C:)⇒ユーザーと開くとPC名が分かります。
またフォルダ名や画像ファイル名は英数字でないと動かないためご注意ください。
3.2 必要なモジュールとウインドの作成
cv2:OpenCVを使うため
tkinter.filedialog:マウスクリックで写真ファイルを選べるようにするためtkinter:messagebox:処理完了後にメッセージを表示するため
time,os:ファイル名を取得、設定するため
3.3 新しいフォルダを作成
新しいフォルダの名前としてtime.strftime("%Y%m%d-%H%M%S")で年月日時分秒を取得します。
そしてfile_name=フォルダ保存場所+フォルダ名と加工して、os.makedirs()で新しいフォルダをデスクトップに作成します。
3.4 画像ファイルをマウスクリックで選ぶ
fl.askopenfienames()でファイルを次の画像のようにマウスクリックで開けるようになります。
引数は、開きたいファイルの場所、開きたいファイルタイプ(all fileにすると全てのファイルが対象になる)、画面のタイトル(なくても良い)です。
選択したファイルの情報は全てpathという変数に格納されます。
3.5 画像をリサイズする
選んだ複数の画像ファイルを1つ1つリサイズしていくためにfor文を使っています。
画像の読み込みはcv2.imreadで、画像のリサイズはcv2.resizeで行っています。
詳しくは本記事の冒頭で紹介した過去記事をご覧ください。
その後、os.path.splittextとbasenameを組み合わせてファイル名を取得。
取得したファイル名の最後にresizeを付けて、imwrite()で保存じています。
処理が終わったらmb.showinfo()で処理が完了したことをユーザーに知らせます。
3.6 ウインド上のボタンとメッセージを作成
ウインドのメッセージとボタンを作成しています。
buttonの第2引数のcommand=getでボタンを押したら関数getが動作するよう結び付けてます。
おすすめ書籍
tkinterは参考書が非常に少ないです、というより日本語の参考書はほぼ皆無です。個人的には以下がお勧めです。
私が勉強していた時は以下のような参考書がなくネットで調べながら苦労してtkinterを覚えましたが、もし当時こんな書籍があったらもっと楽に学べたのに...と思うくらい基本的内容について丁寧に書かれています。
Amazonの月額読み放題サービス「Kindle unlimited」でも読めます。
初回30日間は無料、退会も簡単なので試しに無料体験して読んでみてもよさそうです。
4. 最後に
いかがだったでしょうか。
tkinterを様々なモジュールと組み合わせて使用できる汎用的なモジュールなのでお勧めです。