python
1# -*- coding: utf-8 -*- 2import cv2 3import numpy as np 4 5# フレーム差分の計算 6def frame_sub(src1, src2, src3, th): 7 # フレームの絶対差分 8 d1 = cv2.absdiff(src1, src2) 9 d2 = cv2.absdiff(src2, src3) 10 11 12 diff = cv2.bitwise_and(d1, d2) 13 14 # 二値化処理 15 diff[diff < th] = 0 16 diff[diff >= th] = 255 17 18 # メディアンフィルタ処理(ゴマ塩ノイズ除去) 19 mask = cv2.medianBlur(diff, 3) 20 21 return mask 22 23def main(): 24 # カメラのキャプチャ 25 cap = cv2.VideoCapture(0) 26 27 # フレームを3枚取得してグレースケール変換 28 frame1 = cv2.cvtColor(cap.read()[1], cv2.COLOR_RGB2GRAY) 29 frame2 = cv2.cvtColor(cap.read()[1], cv2.COLOR_RGB2GRAY) 30 frame3 = cv2.cvtColor(cap.read()[1], cv2.COLOR_RGB2GRAY) 31 32 while(cap.isOpened()): 33 # フレーム間差分を計算 34 mask = frame_sub(frame1, frame2, frame3, th=30) 35 36 # 結果を表示 37 38 cv2.imshow("Mask", mask) 39 40 # 3枚のフレームを更新 41 frame1 = frame2 42 frame2 = frame3 43 frame3 = cv2.cvtColor(cap.read()[1], cv2.COLOR_RGB2GRAY) 44 45 # qキーが押されたら途中終了 46 if cv2.waitKey(1) & 0xFF == ord('q'): 47 break 48 49 cap.release() 50 cv2.destroyAllWindows() 51 52if __name__ == '__main__': 53 main() 54
このコードでフレームの差分が出せて動いたものが白く映ります。
これを利用して『白く写った時に一秒間隔でカラーの写真を撮り保存、白く映らない時は写真を撮らない』というようなプログラムを作りたいです。
python
1import cv2 2import numpy as np 3import time 4 5cap = cv2.VideoCapture(0) 6size = (640, 480) 7ret, frame1 = cap.read() 8#frame1 = cv2.resize(frame1, size) 9ret, frame2 = cap.read() 10#frame2 = cv2.resize(frame2, size) 11ret, frame3 = cap.read() 12 13def sub(a, b, c): 14 c = a - b 15 if c > 0: 16 return c 17 if c < 0: 18 return -1 * c 19 20#ave1 = frame1.mean(0).mean(0).mean(0) 21#ave2 = frame2.mean(0).mean(0).mean(0) 22 23while(True): 24 frame1 = frame2 25 #frame2 = frame3 26 frame2 = cap.read() 27 #frame3 = cap.read() 28 29 #ave1 = ave2 30 ave2 = frame2.mean(0).mean(0).mean(0) 31 print ave2 32 33 34 #subave = sub(ave1, ave2, 0) 35 #print subave 36 37 time.sleep(0.7) 38 if cv2.waitKey(1) & 0xFF == ord('q'): 39 break 40 41cap.release() 42cv2.destroyAllWindows() 43
平均値を出すところまで行きましたがwhileの外にave1,ave2をかくと、もちろん値が更新されないので内側にかかなければならいと思いますが、
ave2 = frame2.mean(0).mean(0).mean(0)
AttributeError: 'tuple' object has no attribute 'mean'
というエラーが出てしまいます。これを解決するにはどうしたら良いでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/09/27 02:51
退会済みユーザー
2017/09/27 10:25