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

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

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

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

Python

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

Q&A

解決済

1回答

1290閲覧

Pythonでのパス取得後 それらのパスをトリミングに使いたい

shunsukex1

総合スコア11

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

パス

パス(path)はファイルシステムの場所(階層)を明示したものです。

Python

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

0グッド

0クリップ

投稿2020/01/23 12:16

pythonにてファイル取得まではいいのですがそこから先の動作につなげる方法が全く分かりません。ご教授願います。

import os
import cv2
import tkinter
import tkinter.filedialog as tkdialog

def File_open():
fname = tkdialog.askopenfilename(filetypes = [('.png','*.png')], initialdir = dir)
print(fname)

root = tkinter.Tk()
root.title("採点革命")
root.geometry("400x400")

menubar = tkinter.Menu(root)
filemenu = tkinter.Menu(menubar, tearoff=0)
# ファイルメニュー
filemenu.add_command(label='画像読み込み',command=File_open)
filemenu.add_command(label='閉じる',command=root.destroy)
menubar.add_cascade(label="ファイル", menu=filemenu)

root.config(menu=menubar)
root.mainloop()

こちらのコードと

#複数トリミング
import os
import cv2

filenames = [
r"C:\Users\wallx_savtyrj\Desktop\python\image1.png",
r"C:\Users\wallx_savtyrj\Desktop\python\image2.png",
r"C:\Users\wallx_savtyrj\Desktop\python\image3.png",
r"C:\Users\wallx_savtyrj\Desktop\python\image4.png",
r"C:\Users\wallx_savtyrj\Desktop\python\image5.png",
]

for filename in filenames:
img = cv2.imread(filename)
height = img.shape[0]
width = img.shape[1]
crop = img[80:height , 80:width]
basename, ext = os.path.splitext(filename)
savename = f"{basename}-crop{ext}"
cv2.imwrite(savename, crop)

こちらのコードを使っています。
やりたいこととしては
File_openで取得した複数の.pngのパスを2つ目のfilenameに入れて
二つ目のコードのそれ以下を実行させる。

環境 win10 63bit python3.6

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

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

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

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

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

guest

回答1

0

ベストアンサー

2つ目のクロップするコードを1つ目の File_open() 関数の中に入れればいいのではないでしょうか。

python

1import os 2import tkinter 3import tkinter.filedialog as tkdialog 4 5import cv2 6 7def File_open(): 8 paths = tkdialog.askopenfilenames(filetypes=[(".png", "*.png")], initialdir=dir) 9 for img_path in paths: 10 img = cv2.imread(img_path) 11 if img is None: 12 continue # 読み込みに失敗した場合 13 base_path, ext = os.path.splitext(img_path) 14 save_path = f"{base_path}-crop{ext}" 15 16 crop = img[80: , 80:] 17 cv2.imwrite(save_path, crop) 18 print(f"image saved! {save_path}") 19 20 21root = tkinter.Tk() 22root.title("採点革命") 23root.geometry("400x400") 24 25menubar = tkinter.Menu(root) 26filemenu = tkinter.Menu(menubar, tearoff=0) 27 28filemenu.add_command(label='画像読み込み',command=File_open) 29filemenu.add_command(label='閉じる',command=root.destroy) 30menubar.add_cascade(label="ファイル", menu=filemenu) 31 32root.config(menu=menubar) 33root.mainloop()

投稿2020/01/23 12:43

編集2020/01/23 14:41
tiitoi

総合スコア21956

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

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

shunsukex1

2020/01/23 14:29

Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\wallx_savtyrj\Anaconda3\envs\opencv\lib\tkinter\__init__.py", line 1705, in __call__ return self.func(*args) File "C:\Users\wallx_savtyrj\Desktop\タイトル無し1.py", line 11, in File_open base_path, ext = os.path.splitext(img_path) File "C:\Users\wallx_savtyrj\Anaconda3\envs\opencv\lib\ntpath.py", line 202, in splitext p = os.fspath(p) TypeError: expected str, bytes or os.PathLike object, not tuple 実行してみたらこのようなエラー吐かれてしまいました
tiitoi

2020/01/23 14:33

エラーが出たとき、base_path, ext = os.path.splitext(img_path) の直前に print(img_path) を入れて、中身を出力するとどうなっていますか? askopenfilename() で選択した画像ファイルのパスが img_path に代入されている前提なのですが、そうなっていないでしょうか?
shunsukex1

2020/01/23 14:38

いわれたとおりに実行してみましたところ 先ほどのエラーの上に書くそれぞれの画像のパスが表示されました。 ('C:/Users/wallx_savtyrj/Desktop/python/新しいフォルダー/image1.png', 'C:/Users/wallx_savtyrj/Desktop/python/新しいフォルダー/image2.png', 'C:/Users/wallx_savtyrj/Desktop/python/新しいフォルダー/image3.png', 'C:/Users/wallx_savtyrj/Desktop/python/新しいフォルダー/image4.png') Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\wallx_savtyrj\Anaconda3\envs\opencv\lib\tkinter\__init__.py", line 1705, in __call__ return self.func(*args) File "C:\Users\wallx_savtyrj\Desktop\タイトル無し1.py", line 13, in File_open base_path, ext = os.path.splitext(img_path) File "C:\Users\wallx_savtyrj\Anaconda3\envs\opencv\lib\ntpath.py", line 202, in splitext p = os.fspath(p) TypeError: expected str, bytes or os.PathLike object, not tuple
tiitoi

2020/01/23 14:43

回答のコードは、質問のコードと同じように askopenfilename() で1つのファイルを選択することを前提としていたのですが、askopenfilenames() に変更されたりしましたか? その場合、返り値は画像パスのリストになるので、コードも変更する必要があります。 回答のコードを修正しました。
shunsukex1

2020/01/23 14:51

ありがとうございます!無事できました! そしてすいません・・・ 提示したコードに不手際があったこと本当にすみません。
tiitoi

2020/01/23 14:53

お気になさらずに。 うまくいったようでよかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問