🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Python

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

Q&A

解決済

1回答

1497閲覧

python インデックスの値を保存するファイル名に反映させたい

reonald

総合スコア32

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Python

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

0グッド

0クリップ

投稿2019/12/27 05:31

編集2019/12/27 06:54

得られたインデックスの値を保存するファイル名に反映させたいのですが,

import cv2 import os import glob IMG_SIZE = (200, 200) files = glob.glob("./match/./pura/*") for i, f in enumerate(files): target_img1 = cv2.imread(f) target_img = cv2.cvtColor(target_img1 , cv2.COLOR_BGR2GRAY) target_img = cv2.resize(target_img, IMG_SIZE) bf = cv2.BFMatcher(cv2.NORM_HAMMING) detector = cv2.ORB_create() (target_kp, target_des) = detector.detectAndCompute(target_img, None) rets=[] files = glob.glob("./match/./1/*") for j, f in enumerate(files): img = cv2.imread(f) img = cv2.resize(img, IMG_SIZE) gray = cv2.cvtColor(img, cv2.IMREAD_GRAYSCALE) (comparing_kp, comparing_des) = detector.detectAndCompute(gray, None) matches = bf.match(target_des, comparing_des) dist = [m.distance for m in matches] ret = sum(dist) / len(dist) print(j, ret) rets.append(ret) small=min(rets) small_index=rets.index(min(rets)) save_path = './match/./b/./small_index/_%d.jpg'%i save_path = save_path % small_index print(save_path) cv2.imwrite(save_path, target_img1) コード

retsのリストに5個の数値が格納されており,この中の最小の数値のインデックスの値で保存先のファイルを決めたいです。
match-bの中に0,1,2,3,4の5つのファイルを作っており,この5個のどれかに保存という流れです。

現状下記のエラーが発生しております。
0 78.85875706214689
1 78.33333333333333
2 91.95197740112994
3 80.79943502824858
4 79.16666666666667
Traceback (most recent call last):
File "match2.py", line 37, in <module>
save_path = save_path % small_index
TypeError: not all arguments converted during string formatting

どなたかよろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

python

1cv2.imwrite(save_path % small_index, target_img1) 2

で良いでしょうか。

ちなみに、文字列に値を埋め込む方法はこの%演算子を使う方法の他にもstr.formatとフォーマット済み文字列リテラル(f-strings)があります。

投稿2019/12/27 05:43

hayataka2049

総合スコア30935

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

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

reonald

2019/12/27 06:19 編集

save_path = './match/./b/./small_index/b_%d.jpg' cv2.imwrite(save_path% small_index, target_img1) このようなコードにしても反映されないです。
hayataka2049

2019/12/27 06:34 編集

save_path = './match/./b/./small_index/b_%d.jpg' save_path = save_path % small_index print(save_path) cv2.imwrite(save_path, target_img1) にして保存先パスがちゃんとprintされるかどうか確認してみてはいかがでしょうか。 ./match/./b/./small_index/b_0.jpg などと表示されれば埋め込み自体はうまくいっていると思います。 (それとも、希望のファイル名がこれではないとか?)
reonald

2019/12/27 06:54

質問内容を編集しました。 再度見てもらえると幸いです。
hayataka2049

2019/12/27 07:00

二つお聞きしたいことがあります。 save_path = './match/./b/./small_index/_%d.jpg'%i 1.なぜ%iとしているのでしょうか? 2.出力ファイルパスは具体的にどのようになることを想定していましたか? 私の認識とずれがあるのかもしれません。
reonald

2019/12/27 07:06

%iは直前の%d.jpgの部分に埋め込めれたらなと思っております。 出力先としては, matchファイルの    bファイルの     2(ここがrectsの最小値のインデント番号) のファイルに 0(ここが一番初めのforのファイル読み込みの順番).jpgで保存されるようになればよいと考えております。
hayataka2049

2019/12/27 07:09

すみません、iとsmall_indexの適当な具体的な値に対して、ファイルパスの文字列を書いていただきたいです。 つまり、 --- たとえばi=0, small_index=2のときに 保存先のパスは「ほにゃらら」になってほしい --- と記載していただけるとわかりやすいです。
reonald

2019/12/27 07:15

i=0、small_index=2のときに 保存先のパスがmatch/b/2で、 保存される名前が0.jpgです! わかりにくくてすみません。
hayataka2049

2019/12/27 07:19 編集

save_path = './match/./b/./%d/%d.jpg' % (small_index, i) print(save_path) cv2.imwrite(save_path, target_img1) でよろしいでしょうか。 途中のドットは要らないと思いますが、一応残してあります。
reonald

2019/12/27 07:22

できました。 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問