処理が途中でとまり、
処理後フォルダにaviファイルは保存されるのですが2秒ほどの動画となってしまいます
動画を撮り続けて自分で止めたい場合どのようにすればよいでしょうか
アドバイスお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
リアルタイムでエッジ検出をするのは無理があると思います。参考にされた[https://qiita.com/hitomatagi/items/12a2eceaf65f142ec3df]には、リアルタイムで動画をキャプチャーする事と、静止画のエッジ検出をする事が別々に説明されています。それらを混ぜるのは無茶ではないでしょうか。
回答1件
0
ベストアンサー
リアルタイムでエッジ処理をして動画ファイルを作成します。
処理の流れは以下のとおり
1.カレントディレクトリ直下に新しくフォルダを作成しそのフォルダに移動する。
2.webカメラに接続
3.1フレームを読み込みリアルタイムで画像加工処理
4.処理したフレームを表示とともに画像として保存(フレームごとに画像は保存し蓄積される)
5.3と4を繰り返す。「esc」ボタンを押すと終了処理に入る
6.今まで保存した画像から動画ファイルを作成
python
1import cv2 2import numpy as np 3import os 4import datetime 5 6##カレントディレクトリのパスを取得 7current = os.getcwd() 8##ディレクトリ作成 9now = datetime.datetime.now() 10dir_name = "/IMG_{0:%m%d%H%M}".format(now) 11if os.path.isdir(current + dir_name) == False: 12 os.mkdir(current + dir_name) #make directory 13os.chdir(current + dir_name) #move to directory 14 15# VideoCaptureのインスタンスを作成する。 16cap = cv2.VideoCapture(0) 17cap.set(cv2.CAP_PROP_FPS, 30) 18 19#フレーム数カウント用 20count = 1 21 22while True: 23 # VideoCaptureから1フレーム読み込む 24 ret, frame = cap.read() 25 w, h = frame.shape[0] , frame.shape[1] 26 27 # 加工なし画像を表示する 28 cv2.imshow('Raw Frame', frame) 29 30 # 画像加工処理 31 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 32 blur = cv2.GaussianBlur(gray,(11,11),0) 33 _, binary = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU) 34 nega = cv2.bitwise_not(binary) 35 canny = cv2.Canny(nega, 100, 200) 36 #2値画像をrgbに変換 37 backtorgb = cv2.cvtColor(canny,cv2.COLOR_GRAY2RGB) 38 39 40 # 加工済の画像を表示する 41 cv2.imshow('Edited Frame', backtorgb) 42 43 # フレームを保存 44 filename = "IMG_{}.jpg".format(count) 45 cv2.imwrite(filename, backtorgb) 46 count += 1 47 48 # キー入力を1ms待って、k が27(ESC)だったらBreakする 49 k = cv2.waitKey(1) 50 if k == 27: 51 break 52 53# キャプチャをリリースして、ウィンドウをすべて閉じる 54cap.release() 55cv2.destroyAllWindows() 56 57 58# 連番画像から動画作成 59fourcc = cv2.VideoWriter_fourcc('m','p','4','v') 60video = cv2.VideoWriter('video.mp4', fourcc, 20.0, (h, w)) 61for i in range(1, count): 62 img = cv2.imread("IMG_{}.jpg".format(i)) 63 img = cv2.resize(img, (h,w)) 64 video.write(img) 65 66video.release() 67 68print("完了") 69
投稿2018/08/09 07:55
総合スコア426
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。