Python
1import cv2 2import os 3 4 5 6# 保存パスの指定 7save_path = "./gray_image/camera_capture_" 8def main(): 9 10 # カメラのキャプチャを開始 カメラの番号は、内蔵カメラが0、USBで追加のカメラを接続すると1 11 #基本的に0から順番に割り当てられる 12 cam = cv2.VideoCapture(0) 13 # フレームの初期化 img1 img2 img3 と一枚、一枚と変化している画像を格納している。 14 #画像配列[高さ、幅、RGB] (3次元配列) 15 img1 = img2 = img3 = camera(cam) 16 17 18 # 保存 19 20 th =70 21 num = 1 22 while True: 23 # Enterキーが押されたら終了 24 if cv2.waitKey(1) == 13: break 25 # 差分を調べる 26 print(img1) 27 diff = checkimage(img1, img2, img3) 28 # 差分がthの値以上なら動きがあったと判定 29 cnt = cv2.countNonZero(diff)#countNoneroは面積計測をする 30 print(cnt) 31 if cnt > th: 32 print("カメラに動きを検出") 33 #画像をウィンドウ上に表示するためのもの,# 34 # 第1引数は文字列型で指定するウィンドウ名です.第2引数は表示したい画像です 35 cv2.imshow('PUSH', img3) 36 #すでにファイルがあるかどうかをチェックするためのもの( os.path.exists) 37 while os.path.exists( save_path + str(num) + ".jpg"): 38 num += 1 39 # 画像を保存 40 cv2.imwrite(save_path + str(num) + ".jpg", img3) 41 42 else: 43 cv2.imshow('PUSH', diff) 44 # 比較用の画像を保存 45 img1, img2, img3 = (img2, img3, camera(cam)) 46 47 48 # 後始末 49 # カメラを使った処理には開放粗利が必要 50 cam.release() 51 # Windowを開いた場合は閉じる処理が必要 52 cv2.destroyAllWindows() 53 54 55 56# 画像に動きがあったか調べる関数 フレーム差分法を使用 57#フレーム間差分とは、背景差分とは違い背景画像を用意する必要がなく、連続画像の差分から動体検知をすることができる。 58#IMREAD_GRAYSCALE : グレースケール画像として読み込む 59def checkimage(img1, img2, img3): 60 # グレイスケール画像に変換 読み取りの精度を上げるため 61 gray1 = cv2.cvtColor(img1, cv2.COLOR_RGB2GRAY) 62 gray2 = cv2.cvtColor(img2, cv2.COLOR_RGB2GRAY) 63 gray3 = cv2.cvtColor(img3, cv2.COLOR_RGB2GRAY) 64 65 66 67 # 画像との差分を抽出 変数名(今回はimg_diff)= cv2,absdiff(変化後の画像,変化前の画像) 68 diff1 = cv2.absdiff(gray1, gray2) 69 diff2 = cv2.absdiff(gray2, gray3) 70 71 # 論理積を調べる 72 diff_and = cv2.bitwise_and(diff1, diff2,) 73 74 # 白黒二値化 img_th(変数名) = cv2.threshold(使用数画像,閾値最小値,閾値最大値,閾値処理の種類) 75 _, diff_wb = cv2.threshold(diff_and, 50, 255, cv2.THRESH_BINARY) 76 77 # ノイズの除去 78 diff = cv2.medianBlur(diff_wb, 5) 79 return diff 80 81 82 83# カメラから画像を取得する 84def camera(cam): 85 86 img = cam.read() 87 88 img = cv2.resize(img, (800, 800))#画像の大きさを変える(resize) 89 return img 90 91 # モジュールを直接実行した時だけ、実行したいコード 92 #Pythonスクリプトを直接実行した時には、そのスクリプトファイルは「__main__」という名前のモジュールとして認識される 93 #そのため、スクリプトファイルを直接実行すると__name__変数の中に自動で'__main__'という値が代入される 94if __name__ == '__main__': 95 main()```ここに言語を入力
質問は後から編集できますよ
回答1件
あなたの回答
tips
プレビュー