- 파네백 옵티컬 플로우 계산 코드
import sys
import numpy as np
import cv2
cap = cv2.VideoCapture("vtest.avi")
if not cap.isOpened():
print('Camera open failed!')
sys.exit()
ret, frame1 = cap.read()
if not ret:
print('frame read failed!')
sys.exit()
gray1=cv2.cvtColor(frame1,cv2.COLOR_BGR2GRAY)
#hsv의 속성을 이용해서 모션 벡터의 방향성 정보를 색상으로 표현 0도 방향이면 빨간색, 180도 방향이면 파란색 형태로 보여줌
hsv=np.zeros_like(frame1) #frame1과 같은 사이즈인 0으로 구성된 행렬을 반환
hsv[...,1]=255 #hsv값중 s값을 모두 255로 변환
while True:
ret,frame2=cap.read()
if not ret:
print('frame read failed!')
sys.exit()
gray2=cv2.cvtColor(frame2,cv2.COLOR_BGR2GRAY)
flow=cv2.calcOpticalFlowFarneback(gray1,gray2,None,0.5,3,13,3,5,1.1,0) #많이 사용되는 값들임
#flow(모션벡터)의 (h,w그리고 맨 마지막 성분인 x좌표, h,w 그리고 맨 마지막 성분인 y좌표)
mag,ang=cv2.cartToPolar(flow[...,0],flow[...,1]) #cartToPolar 직각 좌표계를 극좌표계로 변환 x,y좌표를 주면 그 벡터의 크기와 방향정보를 return함
hsv[...,0]=ang*180/np.pi/2 #hsv중 h값을 지정
hsv[...,2]=cv2.normalize(mag,None,0,255,cv2.NORM_MINMAX) #hsv중 v값을 지정 0,255 사이의 값으로 normalize
bgr=cv2.cvtColor(hsv,cv2.COLOR_HSV2BGR)
cv2.imshow('frame',frame2)
cv2.imshow('flow',bgr)
if cv2.waitKey(20)==27:
break
'Computer Vision > opencv(python)' 카테고리의 다른 글
[70] 8) OpenCV 트래커 (0) | 2021.04.09 |
---|---|
[68] 6) 루카스-카나데 옵티컬플로우 (0) | 2021.04.03 |
[67] 5) 캠시프트 알고리즘 (0) | 2021.04.03 |
[66] 4) 평균 이동 알고리즘 (0) | 2021.03.28 |
[65] 3) 배경 차분 : MOG 배경 모델 (0) | 2021.03.28 |