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