open-cv: ビデオ、アニメーション、カメラから画像を取得します

cap = cv2.VideoCapture(‘文件名称’)ビデオ ファイルのキャップ インスタンスを構築します。
cap.read()このメソッドはビデオをフレームごとに抽出します。各フレームは
cap.read()画像です。メソッドはタプルを返します。添字 0 の要素の値は True または False です。False の場合は、ファイルの読み取りが完了したことを意味します。添字 1 の要素は画像オブジェクトであり、これも numpy 配列型データです。read() メソッドはフレームごとに読み取ります。
cap.isOpened()キャップ インスタンスが開いているかどうかを確認するために使用されます。
cap.release()インスタンスを解放します。

import cv2
cap = cv2.VideoCapture('video_3.mp4')
while cap.isOpened():
    ret, img = cap.read()
    if ret is not True:
        print("读取完成,退出")
        break      
    #处理img
    cv2.imshow('vedio', img)
    
    #检查按键
    key = cv2.waitKey(20) & 0xff
    if  key == ord('q') or key == ord('Q') :
        break
        
print('cap.isOpened():',cap.isOpened())
cap.release()
print('cap.isOpened():',cap.isOpened())

cap.isOpened(): True
cap.isOpened(): False

2. 動画から取得

import os
import time
import cv2 
def split_image(fn,path='.\\'):
    '''
    从gif中分离图片
    '''
    fn_full_path = path+fn
    cap = cv2.VideoCapture(fn_full_path)
    count_img = 0
    while True:
        flag,img = cap.read()
        if flag is not True:break
        cv2.imshow('img',img)
        print(img.shape())
        cv2.waitKey()
        cv2.imwrite(str(count_img)+'.jpg',img)
        count_img += 1
        print('count_img=',count_img)


img_fn = '1.gif'
split_image(img_fn)

3.

カメラから画像を取得する: カメラを開くには、カメラのデバイス番号 (整数) を入力パラメータとして VideoCapture (カメラ番号) に渡す必要があります。たとえば、番号 0 のカメラ アクセス インスタンスを構築しcap = cv2.VideoCapture(0)、同様に、後続のステップはビデオ ファイルの読み取りと同じ方法で処理されます。

4.

ビデオ ファイルの書き込み
ビデオ ファイルを書き込むには、VideoWriter オブジェクトを作成する必要があります。このオブジェクトには 4 つのパラメータが順番にあります
: 最初のファイル名、
2 番目のパラメータはエンコード方式で、エンコード方式はファイル名のサフィックスと対応関係にあります。 、
3 番目のパラメータは 1 秒あたりの書き込みです。フレーム数、基準値は人間の目の習慣に合わせた 25 です。4 番目のパラメータは画像
サイズ、int 型です。
いくつかの一般的なファイル名のサフィックスと、エンコーディング メソッド:
avi–XVID
avi–MJPG
avi–mp4v
mp4–mp4v
エンコーディング メソッド オブジェクトを作成する必要がありますVideoWriter_fourcc。MJPG タイプのエンコーディングを作成するには、次の 2 つの方法があります。

fourcc=cv2.VideoWriter_fourcc('M','J','P','G')
fourcc=cv2.VideoWriter_fourcc(*'MJPG')

画像サイズの取得方法は以下のメソッドでも可能ですcat.get(propld)が、このメソッドではfloat型で取得するため、int型に変換してVideoWriterに渡す必要があります。

cap = cv2.VideoCapture(0)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) 
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
width = int(width)
height = int(height)

以下は、XVID、MJPG、mp4v の 3 つのエンコード方式を使用してビデオ ファイルを作成する例です。

import cv2
 
#获取图像宽高
cap = cv2.VideoCapture(0)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) 
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT)
width = int(width)
height = int(height)
print(width,height)
 
#创建VideoWriter对象
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi', fourcc, 25.0, (width,  height))
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out2 = cv2.VideoWriter('output2.avi', fourcc, 25.0, (width,  height))
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out3 = cv2.VideoWriter('output3.mp4', fourcc, 25.0, (width,  height))

while cap.isOpened():   
    ret, img = cap.read()
    print(img.shape)
    if ret is not True:
        print("读取失败,退出")
        break      
    #处理img
    cv2.imshow('vedio', img)
    out.write(img)
    out2.write(img)
    out3.write(img)

    #检查按键
    key = cv2.waitKey(1) & 0xff
    if  key == ord('q') or key == ord('Q') :
        break
 
cap.release()
out.release()
out2.release() 
out3.release()

おすすめ

転載: blog.csdn.net/aqiangdeba/article/details/129750803