와챠의 우당탕탕 코딩 일기장
[OpenCV] opencv 기초 + tracking 본문
반응형
강의 보면서 코드 따라치기 연습
1. OpenCV 소개 및 기본 사용법:
고양이 사진 출력 & 흑백 사진으로 변경 & 파일 저장
https://www.youtube.com/watch?v=F2FRpmh9sQo
# 이미지 읽어서 살펴보기
import cv2
# 이미지 읽어서 Numpy 객체로 만들기
# cv2.imread(file_name, flag)
# 주의: openCV: RGB가 아닌 BGR! + Matplotlib: RGB
img_basic = cv2.imread('venv/dog.jpeg', cv2.IMREAD_COLOR)
# 이미지 화면에 출력
# cv2.imshow(title, image)
cv2.imshow('Image Basic', img_basic)
# 키보드 입력 처리
# cv2.waitKey(time)
# time: 입력 대기시간, 0==무한대기
cv2.waitKey(0)
# 이미지를 파일로 저장
# cv2.imwrite(fime_name, image)
cv2.imwrite('result1.png', img_basic)
# 흑백으로 이미지 변경
img_gray = cv2.cvtColor(img_basic, cv2.COLOR_BGR2GRAY)
cv2.imshow('Image Basic', img_gray)
cv2.waitKey(0)
cv2.imwrite('result2.png', img_gray)
# 화면의 모든 윈도우 닫기
cv2.destroyAllWindows()
2. 물체추적으로 BTS 오빠를 따라다니는 직캠을 만들어보자 - Python
https://www.youtube.com/watch?v=cx7VONjFEE0
원본: https://youtu.be/d8_rraDDSOw
출력:
import cv2
import numpy as np
video_path = 'newjeans_ditto2.mp4'
cap = cv2.VideoCapture(video_path)
# 영상 저장하기
output_size = [100, 250] # (width, height)
fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')
out = cv2.VideoWriter('%s_output.mp4' % (video_path.split('.')[0]), fourcc, cap.get(cv2.CAP_PROP_FPS), output_size)
if not cap.isOpened():
exit()
# 트레커
tracker = cv2.TrackerCSRT_create()
# 첫 프레임 읽기
ret, img = cap.read()
cv2.namedWindow('Select Window')
cv2.imshow('Select Window',img)
# ROI 설정: 첫 프레임에서 설정한 ROI가 rect에 저장됨
rect = cv2.selectROI('Select Window', img, fromCenter=False, showCrosshair=True)
cv2.destroyWindow('Select Window')
# tracker 설정: rect를 계속 쫒게 만듦
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('img', img)
if cv2.waitKey(1) == ord('q'):
break
졸프 전 구현할 기술들 미리 맛보기중!!
트레킹 재밌다..신기하다
그리고 기능에 비해 코드가 엄청 간결하다. 충격적..^^
반응형
'이런 저런 공부' 카테고리의 다른 글
[BigData] "달에 쓰는 일기": 일기 데이터로 단어 빈도 추출하기 (0) | 2023.05.28 |
---|---|
[OpenCV] 얼굴인식 스노우 카메라 쉽게 따라만들기 / 사물인식 YOLO v4 실습하는 영상 (0) | 2023.03.22 |
[협업/Git/Jira 기초] #3 컴공 팀 프로젝트가 처음인 분들께... 💛Git/Commit Convention (0) | 2023.03.06 |
[협업/Git/Jira 기초] #2 컴공 팀 프로젝트가 처음인 분들께... 🧡Pakage Convention(프론트 한정) (0) | 2023.03.02 |
[협업/Git/Jira 기초] #1 컴공 팀 프로젝트가 처음인 분들께... ❤️Code Convention(프론트 한정) (0) | 2023.03.02 |
Comments