Eggs Sunny Side Up
본문 바로가기
Computer Engineering/딥러닝

OpenCV03_동영상로드

by guswn100059 2023. 7. 6.
import cv2

### 동영상 읽고 출력하기

cap = cv2.VideoCapture('./video.mp4')
# 웹캠 연동 방법 - 0
# cap = cv2.VideoCapture(0)

while cap.isOpened() :
    # ret : 읽기 성공 여부 (T/F)
    ret, frame = cap.read()
    
    # 영상을 모두 플레이하면 닫는 기능
    if not ret :
        print('이미지 읽기 실패 또는 전체 영상 재생 완료')
        break
    
    cv2.imshow("video", frame) # 3000 -> 3초
    
    key = cv2.waitKey(33)
    
    # 숫자 1을 누르면 재생 멈추는 기능
    if key == 49: # 49는 숫자 1
        break
    
cap.release()
cv2.destroyAllWindows()



### 동영상 녹화하기

cap = cv2.VideoCapture('./video.mp4')

# 녹화 설정
fps = 30.0  # 초당 프레임이미지 수

# 영상의 크기
w = int(cap.get(3)) # 프레임의 가로
h = int(cap.get(4)) # 프레임의 세로

# 코덱 설정
codec = cv2.VideoWriter_fourcc(*"DIVX")

# 녹화 파일 설정
out = cv2.VideoWriter("record.avi", codec, fps, (w, h))

# 녹화 여부 설정
record = False

while cap.isOpened():
    ret, frame = cap.read()
    
    if not ret:
        print('영상 재생 완료 or frame 읽기 실패')
        break
        
    cv2.imshow("video", frame)
    
    key = cv2.waitKey(33)
    
    if key == 49:  # 숫자 1 -> 영상 멈춤!
        print('녹화 종료')
        break
        
    elif key == 50:  # 숫자 2 -> 영상 녹화!
        print("녹화 시작")
        record = True
        
    if record :
        out.write(frame)
        
cap.release()
cv2.destroyAllWindows()

### 영상 캡쳐하기
- 동영상에서 한 프레임을 이미지 파일로 저장하기

# 영상 재생
cap = cv2.VideoCapture('./video.mp4')
# 웹캠 연동 방법 - 0
# cap = cv2.VideoCapture(0)

# 파일명 구분을 위한 카운터 변수
cnt = 0

while cap.isOpened() :
    # ret : 읽기 성공 여부 (T/F)
    ret, frame = cap.read()
    
    # 영상을 모두 플레이하면 닫는 기능
    if not ret :
        print('이미지 읽기 실패 또는 전체 영상 재생 완료')
        break
    
    cv2.imshow("video", frame) # 3000 -> 3초
    
    key = cv2.waitKey(33)
    
    # 숫자 1을 누르면 재생 멈추는 기능
    if key == 49: # 49는 숫자 1
        break
    
    # 숫자 2를 누르면 캡쳐되는 기능
    elif key == 50:
        cnt += 1
        print(f'pic{cnt}.png 파일 저장')
        cv2.imwrite(f'pic{cnt}.png', frame, params=[cv2.IMWRITE_PNG_COMPRESSION, 0])
        # params=[cv2.IMWRITE_PNG_COMPRESSION, 0] -> 압축하지 않은 PNG
        # 압출률 0~9 설정 가능
    
cap.release()
cv2.destroyAllWindows()

댓글