質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2230閲覧

ラズパイ4,Pythonで、webカメラから動画を保存したい。

anakinsky

総合スコア6

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/01/14 08:23

編集2020/01/15 02:35

前提・実現したいこと

ラズパイ4でpythonを導入し、opencvを用いてwebカメラから得られた動画を背景差分処理して、保存したいです。

環境

Raspberry PI4で
Thonny Python IDEを用いて実行しています。
.python 3.7.3
.opencv version 3.2.0

発生している問題・エラーメッセージ

プログラムは最後まで実行されます。
実行すると、以下のエラーが動画を保存するたびにでて、動画は指定した場所に保存されていますが、その動画を再生することができません。(VLCメディアプレイヤー)
line〇〇にエラーと出ていないため、どこが違うのかがわかりません。
ご教授をお願いいたします。

エラーメッセージ

Corrupt JPEG data: 2 extraneous bytes before marker 0xd1 Corrupt JPEG data: 1 extraneous bytes before marker 0xd0 Corrupt JPEG data: 3 extraneous bytes before marker 0xd4 、 、 、

該当のソースコード 

# coding: utf-8 import cv2 from datetime import datetime cap = cv2.VideoCapture(0) # 動画ファイル保存用の設定 fps = int(cap.get(cv2.CAP_PROP_FPS)) fps=15 # カメラのFPSを取得 w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # カメラの横幅を取得 h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # カメラの縦幅を取得 fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') # 動画保存時のfourcc設定(mp4用) video = cv2.VideoWriter('video1.mp4', fourcc, fps, (w, h), False) # 動画の仕様(ファイル名、fourcc, FPS, サイズ) video1 = cv2.VideoWriter('video2.mp4', fourcc, fps, (w, h)) #背景差分の準備 bgs = cv2.createBackgroundSubtractorKNN() #仕事関数 def task(): while(cap.isOpened()): ret, frame = cap.read() #時刻の表示 date = datetime.now().strftime("%H:%M.%S.%f") cv2.putText(frame,date(0,30),cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255,255), 3, cv2.LINE_AA) #背景差分の設定 mask = bgs.apply(frame) #動画表示 cv2.imshow('mask',mask) cv2.imshow('frame',frame) #動画保存 video.write(mask) video1.write(frame) #Q押すと終了 key = cv2.waitKey(1) & 0xFF if key == ord('q'): break #実行 task() #後処理 cap.release() cv2.destroyAllWindows() ```python3.7.3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

動画の形式をAVI形式にしたら、うまく保存できました。
以下、直したところ
fps = int(cap.get(cv2.CAP_PROP_FPS)) # カメラのFPSを取得
fps=15
w = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # カメラの横幅を取得
h = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # カメラの縦幅を取得
fourcc = cv2.VideoWriter_fourcc(*"DIVX") # 動画保存時のfourcc設定(avi用)
video = cv2.VideoWriter('video2.avi', fourcc, fps, (w, h), False) # 動画の仕様(ファイル名、fourcc, FPS, サイズ)
video1 = cv2.VideoWriter('video3.avi', fourcc, fps, (w, h))

投稿2020/01/15 06:06

anakinsky

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

どこが違うのかがわかりません

私も Python はよくわかっていませんが、cv.putText() の引数に if 文があるのは気になりますね。

python

1 cv2.putText(frame, date, (0,30), cvkey = cv2.waitKey(1) & 0xFF 2 if key == ord('q'): 3 break 42.FONT_HERSHEY_SIMPLEX, 1, (255, 255,255), 3, cv2.LINE_AA)

投稿2020/01/14 11:23

AkitoshiManabe

総合スコア5432

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問