안 쓰던 블로그

OpenCV를 활용한 영상 처리 본문

머신러닝/머신러닝

OpenCV를 활용한 영상 처리

proqk 2021. 1. 17. 22:01
반응형

OpenCV의 VideoCapture클래스는 동영상을 개별 Frame으로 하나씩 읽어(Read)들이는 기능을 제공

     ->VideoCapture: while True문을 계속 돌면서 Frame이 있다면? read()한다 없다면? break한다

VideoWriter는 VideoCapture로 읽어들인 개별 Frame을 동영상 파일로 Write 수행

     ->VideoWriter 객체는 write할 동영상 파일 위치, Encoding코덱 유형, write fps 수치, frame 크기를 생성자로 입력 받아 이들 값에 따른 동영상 Write 수행. VideoWriter는 write시 특정 포맷으로 동영상을 Encoding 할 수 있음(DIVX, XVID, MJPG, X264, WMV1, WMV2). 리눅스 서버에는 반드시 XVID 형태로만 Encoding 적용하고 write시 동영상명의 확장자는 반드시 avi로만 적용

 

import cv2

default_dir = '/content/DLCV'
video_input_path = os.path.join(default_dir, 'data/video/Night_Day_Chase.mp4')
#리눅스에서 video output의 확장자는 반드시 avi 로 설정
video_output_path = os.path.join(default_dir, 'data/output/Night_Day_Chase_output.avi')

cap = cv2.VideoCapture(video_input_path)
codec = cv2.VideoWriter_fourcc(*'XVID') #코덱은 *'XVID'로 설정

#프레임의 width와 height가져와서 size로 저장
vid_size = (round(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),round(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))) #(200, 400)
vid_fps = cap.get(cv2.CAP_PROP_FPS ) #fps는 그대로 가져온다
    
vid_writer = cv2.VideoWriter(video_output_path, codec, vid_fps, vid_size) #비디오를 쓴다

frame_cnt = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
print('총 Frame 갯수:', frame_cnt, 'FPS:', round(vid_fps), 'Frame 크기:', vid_size)

VideoCapture로 영상을 가져온다

 

import time

green_color=(0, 255, 0)
red_color=(0, 0, 255)

start = time.time() #시간
index=0
while True:
    hasFrame, img_frame = cap.read() #프레임 하나 가져옴
    if not hasFrame:
        print('더 이상 처리할 frame이 없습니다.')
        break
    index += 1
    print('frame :', index, '처리 완료')
    cv2.rectangle(img_frame, (300, 100, 800, 400), color=green_color, thickness=2) #좌상단, 우하단, 너비, 높이 사각형
    caption = "frame:{}".format(index)
    cv2.putText(img_frame, caption, (300, 95), cv2.FONT_HERSHEY_SIMPLEX, 0.7, red_color, 1) #글자 적음
    
    vid_writer.write(img_frame) #write한다->영상에서는 BGRRGB는 알아서 처리해줘서 따로 신경쓸 필요 없다

print('write 완료 시간:', round(time.time()-start,4))
vid_writer.release()
cap.release()

영상을 쓴다

 

import os, sys 
from google.colab import drive 

drive.mount('/content/gdrive')

코랩에서 영상을 보려면 구글 드라이브에 마운트해야 한다

 

!cp /content/DLCV/data/output/Night_Day_Chase_output.avi '/content/gdrive/My Drive/Night_Day_Chase_output.avi'

마운트한 영상(Object Detection 적용된 영상 파일)을 구글 드라이브에서 다운로드 한다

반응형
Comments