まず、映像取得と表示
VideoCapture
映像取得のためのクラスは、ビデオカメラやファイルから読み込むことができます。まず、VideoCaptureオブジェクトのパラメータを作成すると、デバイスのインデックス(カメラ指数)またはビデオファイルの名前にすることができます。インデックス装置あれば、一つだけのカメラを接続したとき、0または1であってもよく、また、第2のカメラが通過することができる選択します。そして、一つのフレームからの物体のビデオ画像フレームを取得してもよいです。最後に、リリースVideoCaptureオブジェクト。
:を含む機能OpenCVのに関連する映像フレーム、表示
オブジェクトを作成する:cap = cv2.VideoCapture(0)
オープンビデオ初期化:cap.open()
初期化が成功か否かを決定する:cap.isOpened()
ビデオフレームを読み出す:cap.read()
画像フレームと画像フレームデータかどうかを返しています。
ビデオ属性を取得:cap.get(propld)
0-18からPROPIDを、各番号は、ビデオのプロパティを表します。
セットビデオ属性値:cap.set(propId, value)
一部の属性値が関数によって提供されてもよいが、値が更新された値を表しています。
ビデオオブジェクトエクスプローラリリース:cap.release()
カメラからの映像を取得し、映像表示階調に変換します。
import cv2
import numpy as np
# 从摄像头ID获取视频,从文件获取改为视频文件路径
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("Cannot open camera")
exit()
while(True):
# 一帧帧读取视频z
ret, frame = cap.read()
# 都每一帧进行处理
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 显示处理后图片
cv2.imshow('frame', gray)
#若检测到按键 ‘q’,退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()#释放摄像头
cv2.destroyAllWindows()#删除全部窗口
第二に、動画の保存
VideoWriter
まず、保存クラスを実装ビデオ、VideoWriterオブジェクトを作成します(例:output.avi)出力ファイル名を指定します。それが真である場合、のFourCCコードを指定し、フレームレート(FPS)、及びフレームのisColor縦横フラグ、エンコーダは、そうでない場合は、グレースケールフレームに適しており、色のフレームを必要とします。
FourCC
コードされた圧縮されたフレームを表す4つの文字とは、利用可能なコードfourcc.orgのリストに見出すことができます。これは、プラットフォームに依存します。
- Fedoraの:. DIVX、XVID、MJPG、X264、WMV1、WMV2(XVID好ましい.MJPGが高いサイズのビデオ.X264を生成する非常に小さなビデオを提供することができる)で
- Windowsの場合:DIVX(テストに、より追加)
- MJPG(.MP4)、DIVX(.AVI)、X264(mkvを):OSXで
FourCCコードは()は、例えば、cv2.VideoWriter_fourcc通過させる:
MJPGため、cv2.VideoWriter_fourccとしてのFourCCコードは( 'M'は、 'J '、 'P'、 'G') またはcv2.VideoWriter_fourcc(* 'MJPG')を渡します。
取得した映像ファイルから、垂直方向の各フレームのために、それ保存反転。
import cv2
cap = cv2.VideoCapture('input.avi')
# 创建VideoWriter对象,并设置fourcc
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640, 480))
while cap.isOpened():
ret, frame = cap.read()
if not ret:
print("Can't receive frame (stream end?). Exiting ...")
break
frame = cv2.flip(frame, 0)
# 处理后的帧写入对象
out.write(frame)
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放所有对象和资源
cap.release()
out.release()
cv2.destroyAllWindows()
第三に、アプリケーション
前処理ビデオ:5は、保存フォルダ水平ミラーリングを反転し、ビデオファイルから他のすべての画像フレームを撮影しました。
import cv2
cap = cv2.VideoCapture('input.avi')
num = 0
while cap.isOpened():
ret, frame = cap.read()
if ret:
if num % 5 == 0:
frame = cv2.flip(frame, 1)
cv2.imwrite('frame_%d.jpg' % num, frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
num += 1
# 释放所有对象和资源
cap.release()
out.release()
cv2.destroyAllWindows()