본문 바로가기

오늘 배운 내용

파이썬 Python[활용] : 동영상에서 물체 추적해서 동영상 만들기

 

Object Tracking

동영상에서 특정 물체를 지정하고, 지정한 물체를 따라가게 만드는 물체 트랙킹을 공부하였다.

 

ROI (Region of Interest)

ROI 는 Region of Interest의 약자인데 거창한 뜻은 아니고 그냥 이미지상에서 내가 관심있어하는 일부 영역을 뜻한다.

 


오늘 파이썬으로 응용 및 공부해본 것 결과

 

 

한계

만약 특정 물체가 가려지거나 사라질경우 다른 물체가 설정이 되어서 트랙커기능이 안된다.

 

코드

import cv2

video_path = 'videos.mp4'
cap = cv2.VideoCapture(video_path) # 비디오 캡쳐 함수 => cv2.VideoCapture

output_size = (187, 335) # width, height (휴대폰에 꽉차는 사이즈)
# 비디오 저장
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v') #mp4v라는 코덱으로 저장
out = cv2.VideoWriter('%s_output.mp4' % (video_path.split('.')[0]), fourcc, cap.get(cv2.CAP_PROP_FPS), output_size)
    # cv2.VideoWrite() 비디오 출력 모듈을 초기화 한다. 함수 괄호 안에는 (이름, 코덱, fps, 사이즈)

if not cap.isOpened(): # 함수 =>cap.isOpened()는 비디오가 제대로 로드되면 True 반환
    exit()

tracker = cv2.TrackerCSRT_create()

ret, img = cap.read()

cv2.namedWindow('Select Window')
cv2.imshow('Select Window', img)

# ROI(Region of Interest) 설정하기
rect = cv2.selectROI('Select Window', img, fromCenter=False, showCrosshair=True)
# ROI를 설정하여 rect으로 반환하는데, 센터에서 시작하지말고, 중심점을 보여라
cv2.destroyWindow('Select Window')

# 트랙커 설정하기
tracker.init(img, rect)

while True:
    ret, img = cap.read()

    if not ret: # 비디오를 다 읽고 난 뒤
        exit()

    success, box = tracker.update(img)
    left, top, w, h = [int(v) for v in box]

    center_x = left + w /2
    center_y = top + h /2

    result_top = int(center_y - output_size[1] / 2)
    result_bottom = int(center_y + output_size[1] / 2)
    result_left = int(center_x - output_size[0] / 2)
    result_right = int(center_x + output_size[0] / 2)

    result_img = img[result_top:result_bottom, result_left:result_right].copy()

    out.write(result_img) # 비디오 저장하는 함수

    cv2.rectangle(img, pt1=(left, top), pt2=(left+w, top+h), color=(255, 255, 255), thickness=3)

    cv2.imshow('result_img', result_img)
    cv2.imshow('img', img)
    if cv2.waitKey(1) == ord('q'): # ord('q')의 뜻 : 문자 q에 해당하는 아스키코드를 int로 반환한다.
        break # 즉, q를 누를시 while 문 빠져나게가 로직 작성