nktpgamw
@nktpgamw (onjga)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

フレーム間差分法をwhile文で連続させたい

Discussion

解決したいこと

繰り返し文を利用して800枚ほどの連続したフレーム画像で、img_prd_0とimg_prd_1、img_prd_1とimg_prd_2、img_prd_2とimg_prd_3.......との差分を取った画像を取得したいのですが、保存するときにファイル名に変数を使用できず困っております。ちなみに下記のコードは変数kを用いようとしている例です。pythonは初心者です、有識者の方々ぜひご教授ください。

該当するソースコード

while k < num:
    img_prd_(k) = cv2.imread('C:prd_'+str(k)+'.png', 0)
    k += 1
k = 0

while k < num:
    img_dif_prd_(k) = cv2.absdiff(img_prd_(k+1), img_prd_(k)
    #差分画像の保存
    cv2.imwrite('C:differential\dif_dg_'+str(k)+'.png', img_dif_prd_(k))
    print('dif_'+str(k)+'.png')
    
    k += 1

k = 0 
0

全体のコードが無いから何とも言えないけど、
保存する前までに色々とエラーがあるのでは…?

  1. 最初の1行目で k が定義されてなくてエラーが起きませんか?

  2. img_prd_(k), img_dif_prd_(k) について
    変数名(変数) は式として間違っているので代入することはできません。
    コードを変えれば同じようなことができるけどリストや辞書に入れるべき

  3. 2つ目の while k < num について
    k = 0, num = 800(800枚)とするならば
    k = 799(800枚目)のとき、k + 1(801枚目)でエラーが起こる

0Like

すみません、一部のコードしか載せていませんでしたね。1.kの定義と3.kの範囲については問題ありません。2.式として間違っているとゆう部分について、どのように変えればよいでしょうか?

0Like

一般的に変数名を動的に変更することはあまりないですし、今回の場合でも特に変数名を動的に変更する必要はないと思います。
また、今回の処理の内容であればwhile文を2つ用意する必要もないと思います。
(質問するうえで、その他細かい処理を省略しているのであればすみません。)

動かして試したわけではないですが、以下のような処理の流れでやりたいことは実現できると思います。

k = 0

while k < num:
    img = cv2.imread('C:prd_'+str(k)+'.png', 0)
    img_next = cv2.imread('C:prd_'+str(k+1)+'.png', 0)
    img_dif = cv2.absdiff(img, img_next)
    #差分画像の保存
    cv2.imwrite('C:differential\dif_dg_'+str(k)+'.png', img_dif)
    
    k += 1
1Like

本当にありがとうございます!単純に考えてそのようにすればできますよね、、、すみません。自分も大雑把な質問内容で分かりずらかったと思いますが丁寧な回答のおかげで無事解決いたしました!ありがとうございます!

1Like

Your answer might help someone💌