ホームページ >バックエンド開発 >Python チュートリアル >Python プログラミング: カメラを使用してビデオをキャプチャ、再生、保存する

Python プログラミング: カメラを使用してビデオをキャプチャ、再生、保存する

WBOY
WBOY転載
2023-04-24 12:43:111947ブラウズ

如何用 Python 捕获、播放和保存摄像头视频

数日前、読者がファン グループで次のような質問をしました:

Python でビデオの明瞭さとコントラストを改善するにはどうすればよいですか?

Python を使用してビデオを操作するという側面については、これまでカバーしたことがなかったので、まだカバーしていないと読者に伝えて申し訳ありませんでした。

過去 2 日間考えた結果、このセクションに内容を追加する必要があると感じました。そうすることで私の関与の範囲が広がる一方で、また、ファンへの質問にも答えます。

今日は、動画の読み込みや再生、動画の保存など、Python で動画を操作する最も基本的な操作を共有します。

ビデオを読む

ビデオをキャプチャするには、VideoCapture オブジェクトを作成する必要があります。その引数には、デバイス インデックスまたはビデオ ファイルの名前を指定できます。したがって、ビデオを読み取るには 2 つの方法があります。つまり、カメラからビデオを読み取る方法と、ファイルからビデオを読み取る方法です。

カメラからのビデオの読み取り

カメラ付きラップトップなどのカメラ付きデバイスの場合、コンピュータのカメラを直接アクティブにして、カメラのビデオ ストリームを読み取ることができます。

import cv2 as cv
cap = cv.VideoCapture(0)
if not cap.isOpened():
print("Cannot open camera")
exit()
while True:
# 逐帧捕获
ret, frame = cap.read()
# 如果正确读取帧,ret为True
if not ret:
break
# 显示结果帧
cv.imshow('frame', frame)
if cv.waitKey(1) == ord('q'):
break
# 完成所有操作后,释放捕获器
cap.release()
cv.destroyAllWindows()

ここでは、デバイス インデックスを表すパラメーター 0 を VideoCapture オブジェクトに渡しました。デバイス インデックスは、どのカメラを指定する番号です。通常、カメラが接続されます(私の場合のように)。したがって、単純に 0 を渡します。 1 などを渡すことで 2 番目のカメラを選択できます。

cap.isOpened() は、ビデオがキャプチャされたかどうかを判断するために使用されます。

cap.read() はブール値 (True/False) を返します。フレームが正しく読み取られた場合は True になります。したがって、この戻り値を確認することでビデオの終わりを確認できます。

cv.imshow メソッドはビデオ フレームを表示するために使用されます。ビデオの再生原理は、フレームごとに再生することです。

最後に、cap.release() を使用してキャプティブを解放することを忘れないでください。

このコードを実行すると、コンピューターのカメラからの画像をリアルタイムで再生するポップアップ ウィンドウが表示されます。

ファイルからビデオを再生

カメラからキャプチャするのと同じように、カメラのインデックスをビデオ ファイル名で変更するだけです。

さらに、ビデオを表示するときに、cv.waitKey() を通じてビデオの再生速度を制御できます。設定が小さすぎると、ビデオは 2 倍速再生と同等に非常に速くなり、設定が大きすぎると、ビデオは非常に遅くなり、遅延再生と同等になります。通常は 25 ミリ秒で問題ありません。

import cv2 as cv
cap = cv.VideoCapture('video.mp4')
while cap.isOpened():
ret, frame = cap.read()
# 如果正确读取帧,ret为True
if not ret:
break
cv.imshow('frame', frame)
if cv.waitKey(1) == ord('q'):
break
cap.release()
cv.destroyAllWindows()

このコードを実行すると、選択したビデオ ファイルを再生するポップアップ ウィンドウが表示されます。

ビデオの保存

カメラからビデオを読み取り、ビデオをローカルに保存できます。ビデオをキャプチャしてフレームごとに処理します。このビデオを保存したい場合は、cv.VideoWriter() を使用するだけで非常に簡単です。

cv.VideoWriter() には 5 つのパラメータがあります:

  • パラメータ 1: 出力ファイル名 (例: Output.mp4)。
  • パラメータ 2: FourCC コード。FourCC は、ビデオ コーデックを指定するために使用される 4 バイトのコードです。
  • パラメータ 3: フレーム レートの数。
  • パラメータ 4: フレーム サイズ。
  • パラメータ 5: カラーフラグ。 True の場合は通常のカラー出力、それ以外の場合はグレー画像出力。

FourCC とビデオ形式の比較に関して、いくつかの一般的な形式をリストしました。

cv2.VideoWriter_fourcc('P','I','M','1 ' ) = MPEG-1 コーデック cv2.VideoWriter_fourcc('M','J','P','G') = motion-jpeg コーデック --> mp4v cv2.VideoWriter_fourcc('M', 'P', '4 ' , '2') = MPEG-4.2 コーデック cv2.VideoWriter_fourcc('D', 'I', 'V', '3') = MPEG-4.3 コーデック cv2.VideoWriter_fourcc('D', 'I', 'V ' , 'X') = MPEG-4 コーデック --> avi cv2.VideoWriter_fourcc('U', '2', '6', '3') = H263 コーデック cv2.VideoWriter_fourcc('I', '2', ' 6', '3') = H263I コーデック cv2.VideoWriter_fourcc('F', 'L', 'V', '1') = FLV1 コーデック

ビデオを保存するコード:

import cv2 as cv
cap = cv.VideoCapture(0)
# 定义编解码器并创建VideoWriter对象
fourcc = cv.VideoWriter_fourcc(*'MJPG')
out = cv.VideoWriter('output.mp4', fourcc, 20.0, (640,480))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
frame = cv.flip(frame, 1)
# 写翻转的框架
out.write(frame)
cv.imshow('frame', frame)
if cv.waitKey(1) == ord('q'):
break
# 完成工作后释放所有内容
cap.release()
out.release()
cv.destroyAllWindows()

このコードを実行すると、コード ディレクトリに出力.mp4 ビデオ ファイルが見つかります。

上記のコードで、ビデオ操作を終了したい場合は、キーボードの q を押すだけです。

まとめ

今回紹介するのは以上ですが、python-opencvを使って動画を操作するのは比較的簡単です。もちろん、動画の読み込み時や保存時に動画に何らかの加工を施すこともできますので、これについては次の記事で紹介します。

以上がPython プログラミング: カメラを使用してビデオをキャプチャ、再生、保存するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。