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 문 빠져나게가 로직 작성
'오늘 배운 내용' 카테고리의 다른 글
파이썬 Python [활용] : 사진을 스케치하는 프로그램을 만들어 보자 (0) | 2020.09.25 |
---|---|
[Python]파이썬 라이브러리 : 크롬드라이버 자동설치 chromedriver-autoinstaller (0) | 2020.09.23 |
파이썬 Python [활용] : Scapy를 통해서 특정 망 내에서 디바이스 정보 가지고 오기 (0) | 2020.09.16 |
Python 파이썬[활용] : 동영상을 한프레임 씩 읽어와서 변환하기 (0) | 2020.09.08 |
파이썬 : Python 웹스크랩핑 or 크롤링 정리 (0) | 2020.08.23 |