비디오 작업_01 비디오 읽기 및 쓰기: 비디오 읽기 및 쓰기 + 비디오 읽기 + 비디오 저장

1 파일에서 비디오를 읽고 재생


OpenCV에서 비디오를 가져오려면 VideoCapture 개체를 만들고 읽고 싶은 비디오 파일을 지정해야 합니다.

1. 영상을 읽을 객체 생성

cap = cv.VideoCapture(filepath)

매개변수:

        파일 경로: 비디오 파일 경로


2. 영상 속성 정보

2.1 비디오의 일부 속성을 가져옵니다.

retval = cap.get(propId)

매개변수:

  • propId: 0에서 18 사이의 숫자, 각 숫자는 비디오의 속성을 나타냅니다.

일반적인 속성은 다음과 같습니다.

2.2 영상의 속성 정보 수정

cap.set(propId,value)

매개변수:

  • proid: 위의 표에 해당하는 속성의 인덱스
  • 값: 수정된 속성 값

이미지를 성공적으로 읽었는지 확인

 isornot = cap.isOpened()

읽기가 성공하면 true를 반환하고, 그렇지 않으면 False
를 반환하여 비디오 프레임을 가져옵니다.

ret, frame = cap.read()

매개변수:

  • ret: 획득이 성공하면 True를 반환하고, 획득에 실패하면 False를 반환합니다.
  • 프레임: 특정 프레임의 이미지 가져오기

cv.imshow()를 호출하여 이미지를 표시하고 cv.waitkey()를 사용하여 이미지를 표시할 때 적절한 지속 시간을 설정합니다. 너무 낮으면 비디오가 매우 빠르게 재생되고 너무 높으면 동영상이 재생됩니다. 아주 천천히 재생합니다. 일반적으로 25ms로 설정하는 것이 좋습니다.
마지막으로 cap.realease()를 호출하여 비디오를 릴리스합니다.

예시:

import numpy as np
import cv2 as cv
# 1.获取视频对象
cap = cv.VideoCapture('img/01.mp4')
# 2.判断是否读取成功
while(cap.isOpened()):
    # 3.获取每一帧图像
    #ret: 若获取成功返回True,获取失败,返回False 
    #Frame: 获取到的某一帧的图像
    ret, frame = cap.read() 
    # 4. 获取成功显示图像
    if ret == True:
        cv.imshow('frame',frame)
    # 5.每一帧间隔为25ms
    if cv.waitKey(25) & 0xFF == ord('q'):
        break
# 6.释放视频对象
cap.release()
cv.destroyAllwindows()


2 비디오 저장


OpenCV에서는 다음과 같이 출력 파일의 이름을 지정하는 VedioWriter 개체를 사용하여 비디오를 저장합니다.

비디오 쓰기를 위한 개체 만들기

out = cv2.VideoWriter(filename,fourcc, fps, frameSize)

매개변수:

  • 파일 이름: 비디오가 저장되는 위치
  • fourcc: 비디오 코덱을 지정하는 4바이트 코드
  • fps: 프레임 속도
  • frameSize: 프레임 크기

영상의 코덱을 아래와 같이 설정하고,

retval = cv2.VideoWriter_fourcc( c1, c2, c3, c4 )

매개변수:

  • c1,c2,c3,c4:는 비디오 코덱의 4바이트 코드입니다. fourcc.org에서 사용 가능한 코드 목록을 찾으십시오. 플랫폼과 밀접하게 관련되어 있으며 일반적으로 사용되는 코드는 다음과 같습니다.

                        Windows: DIVX(.avi)

                        OS: MJPG(.mp4), DIVX(.avi), X264(.mkv).

  • cap.read()를 사용하여 비디오의 각 프레임을 가져오고 out.write()를 사용하여 비디오에 이미지 프레임을 씁니다.
  • cap.release() 및 out.release()를 사용하여 리소스를 해제합니다.

예시:

import cv2 as cv

# 1. 读取视频
cap = cv.VideoCapture("img/01.mp4")

# 2. 获取图像的属性(宽和高),并将其转换为整数
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))

# 3. 创建保存视频的对象,设置编码格式,帧率,图像的宽高等
out = cv.VideoWriter('outpy.avi', cv.VideoWriter_fourcc('M', 'J', 'P', 'G'), 10, (frame_width, frame_height))
while (True):
    # 4.获取视频中的每一帧图像
    ret, frame = cap.read()
    if ret == True:
        # 5.将每一帧图像写入到输出文件中
        out.write(frame)
    else:
        break

# 6.释放资源
cap.release()
out.release()
cv.destroyAllWindows()

요약하다

비디오 읽기:

  •         비디오 읽기: cap = cv.VideoCapture()
  •         읽기 성공 판단: cap.isOpened()
  •         이미지의 각 프레임 읽기: ret, frame = cap.read()
  •         속성 가져오기: cap.get(proid)
  •         속성 설정: cap.set(proid,value)
  •         리소스 릴리스: cap.release()

비디오 저장

  •         비디오 저장: out = cv.VideoWrite()
  •         비디오 쓰기: out.write()
  •         리소스 릴리스: out.release()

추천

출처blog.csdn.net/qq_39237205/article/details/122083255#comments_20524087