반응형
Notice
Recent Posts
Recent Comments
Link
안 쓰던 블로그
OpenCV를 활용한 영상 처리 본문
반응형
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 적용된 영상 파일)을 구글 드라이브에서 다운로드 한다
반응형
'머신러닝 > 머신러닝' 카테고리의 다른 글
Faster RCNN (0) | 2021.01.20 |
---|---|
RCNN, SPM, SPP, SPPNet (0) | 2021.01.17 |
OpenCV를 활용한 이미지 처리 (0) | 2021.01.17 |
Object Detection_5. Pascal VOC 데이터 세트 가져오기 (0) | 2021.01.17 |
Object Detection_4. NMS 및 성능 평가 Metric - mAP (1) | 2021.01.17 |
Comments