opencvビデオ操作

  • カメラからビデオコンテンツを読む
import numpy as np
import cv2

# 从摄像头获取图像数据
cap = cv2.VideoCapture(0)

while(True):
    # ret 读取成功True或失败False
    # frame读取到的图像的内容
    # 读取一帧数据
    ret,frame = cap.read()
    # 变为灰度图
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
    cv2.imshow('frame',gray)
    # waitKey功能是不断刷新图像,单位ms,返回值是当前键盘按键值  
    # ord返回对应的ASCII数值
    if cv2.waitKey(100) & 0xff == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()
  • cv2.waitKey(100)&0xff == ord( 'q')に関する説明は、https://blog.csdn.net/weixin_44049693/article/details/106271643にあります。
  • ビデオファイルの
    読み取りcap.read()はブール値(True / False)を返します。読み取られたフレームが正しい場合、それはTrueです。したがって、最終的には、戻り値を確認することで、ビデオファイルが最後に到達したかどうかを確認できます。
    キャップがカメラデバイスを正常に初期化できない場合があります。この場合、上記のコードはエラーを報告します。cap.isOpened()を使用して、初期化が成功したかどうかを確認できます。戻り値がTrueの場合、問題はありません。それ以外の場合は、関数cap.open()を使用します。
    関数cap.get(propId)を使用して、ビデオのパラメーター情報を取得できます。ここで、propIdは0から18までの任意の整数にすることができます。各番号は、ビデオの属性を表します。

これらの値の一部はcap.set(propId、value)を使用して変更でき、valueは設定する新しい値です。
たとえば、cap.get(3)とcap.get(4)を使用して、各フレームの幅と高さを確認できます。デフォルトで取得される値は640X480です。ただし、ret = cap.set(3,320)およびret = cap.set(4,240)を使用して、幅と高さを320X240に変更できます。
ここに画像の説明を挿入

  • ローカルビデオファイルを読む
import numpy as np
import cv2
# 从文件读取视频内容
cap = cv2.VideoCapture('videos/cats.mp4')
# 视频每秒传输帧数
fps = cap.get(cv2.CAP_PROP_FPS)
# 视频图像的宽度
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
# 视频图像的长度
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(fps)
print(frame_width)
print(frame_height)

ここに画像の説明を挿入

  • ローカルビデオファイルの表示
while(True):
    # ret 读取成功True或失败False
    # frame读取到的图像的内容
    # 读取一帧数据
    ret,frame = cap.read()
    if ret!=True:
        break
    cv2.imshow('frame',frame)
    # waitKey功能是不断刷新图像,单位ms,返回值是当前键盘按键值
    # ord返回对应的ASCII数值
    if cv2.waitKey(33) & 0xff == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

ここに画像の説明を挿入

ビデオライティング

ビデオをキャプチャして各フレームを処理した後、ビデオを保存します。写真の場合、それは非常に簡単です。cv2.imwrite()を使用するだけです。しかし、ビデオの場合は、さらに多くの作業を行う必要があります。
今回は、VideoWriterオブジェクトを作成します。出力ファイルの名前を決定する必要があります。次に、FourCCコード(以下で説明)を指定します。再生周波数とフレームサイズも決定する必要があります。最後はisColorタグです。Trueの場合、各フレームはカラー画像です。それ以外の場合は、グレースケール画像です。
FourCCは、ビデオのエンコード形式を決定するために使用される4バイトのコードです。利用可能なコードのリストはfourcc.orgにあります。
•Fedoraの場合:DIVX、XVID、MJPG、X264、WMV1、WMV2。(XVIDの方が望ましい。MJPGは大きなサイズのビデオになります。X264は非常に小さなサイズのビデオになります)

# 从文件读取视频内容
cap = cv2.VideoCapture('videos/cats.mp4')
# 视频每秒传输帧数
fps = cap.get(cv2.CAP_PROP_FPS)
# 视频图像的宽度
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
# 视频图像的长度
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(fps)
print(frame_width)
print(frame_height)

ここに画像の説明を挿入

#指定视频编码格式
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('videos/output11.avi',fourcc,fps,(frame_width,frame_height))

while(True):
    ret, frame = cap.read()
    if ret==True:
        # 水平翻转
        frame = cv2.flip(frame,1)
        out.write(frame)
        cv2.imshow('frame',frame)
        if cv2.waitKey(25) & 0xff == ord('q'):
            break
    else:
        break
out.release()
cap.release()
cv2.destroyAllWindows()

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/cyj5201314/article/details/115056185