[03] OpenCV4.X OpenCVのシリーズのビデオキャプチャと表示

まず、映像取得と表示

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()

おすすめ

転載: www.cnblogs.com/fahaihappy/p/12555356.html
おすすめ