test_dataフォルダから画像を複数枚入力して処理しました。
その結果をoutputフォルダに出力しようと試みております。
下記のコードで実行後、エラーはでませんでしたが、画像がoutputフォルダに出力されていない状態です。
どのようにすれば、outputフォルダに格納されるでしょうか?
python
1import cv2 2import numpy as np 3import os 4from tqdm import tqdm 5import glob 6 7images = glob.glob('../test_data/*') 8for im_n in images: 9 10 img = cv2.imread(im_n) 11 mark = np.zeros_like(img) 12 13 mark = cv2.putText(cv2.UMat(mark), 'ABCDEF', (50, 300), cv2.FONT_HERSHEY_SIMPLEX, 2.0, (255, 255, 255), 5, cv2.LINE_AA) 14 new_img = cv2.addWeighted(img, 1, mark, 0.3, 0) 15 cv2.imwrite('../test_data/output/im_n.jpeg',new_img) 16 17
###試したこと
①imwriteの拡張子がjpegに対応していない?
→.../test_data/output/im_n.jpgに拡張子を変更しても結果変わらず....
'.../test_data/*'
の
「...」という部分は,
質問文にコードを提示する際にパスの前半部分を省略する意味で書いた のではなくて,
本当にコードにそのように . を3つ並べて書いている ということですか?
ご回答ありがとうございます。
fanaさんの仰るとおり、”質問文にコードを提示する際にパスの前半部分を省略する意味”で書きました。実際はフルパスで実装しております。
しかし、ppaulさんからのご回答を頂いた後に
①'../test_data/*'
②.../test_data/*'
①と②の両方を試してみましたが
①は出力無し(エラーもなし)
②はSyntaxError: invalid syntaxでした。
(既存の回答が 「...」 を「..」の記述間違いと捉えての物に見えたので,確認してみました)
私は python を知らないのですが,おそらく「文字列リテラルを記述する際にはシングルクォート(') で囲む」という文法なのではないでしょうか.
で,②は囲めてないので SyntaxError なのでしょう.
img や new_img が真っ当なデータになっているのか否かを確認してみてはどうでしょう.
imreadの結果が「失敗した場合の値」になっていないかどうかのチェックを入れるとか.
あと,入出力のパスに日本語とかが含まれているならば,そうじゃない場所であればいけるのか?とか.
(「opencv パス 日本語」とかでググると,pythonでimreadのときにうまくいかない,みたいな話がある様子?)
ありがとうございます、まさに入出力周りに依存したバグでございました。
yuki23さんから頂いたご回答で修正することができましたmm
回答3件
あなたの回答
tips
プレビュー