Python+OpenCV 목표 추적 기본 운동 검 측 실현

목표 추적 은 카메라 영상 에서 의 이동 목 표를 포 지 셔 닝 하 는 과정 으로 매우 광범 위 하 게 응용 된다.실시 간 목표 추적 은 많은 컴퓨터 시각 응용의 중요 한 임무 이다.예 를 들 어 감시,감 지 를 바탕 으로 하 는 사용자 인터페이스,증강 현실,대상 을 바탕 으로 하 는 영상 압축 과 보조 운전 등 이다.
영상 목표 추적 을 실현 하 는 방법 이 많 습 니 다.모든 이동 목 표를 추적 할 때 프레임 간 의 차 이 는 유용 해 집 니 다.동 영상 에서 이동 하 는 손 을 추적 할 때 피부색 의 평균 값 이동 방법 을 바탕 으로 하 는 것 이 가장 좋 은 해결 방안 이다.추적 대상 의 한 면 을 알 았 을 때 템 플 릿 매 칭 은 좋 은 기술 입 니 다.
본 논문 코드 는 기본 적 인 운동 검 사 를 하 는 것 이다.
'배경 프레임'과 다른 프레임 간 의 차 이 를 고려 합 니 다.
이런 방법 은 검 측 결과 가 좋 지만 배경 프레임 을 미리 설정 해 야 한다.실외 에 있 으 면 빛 의 변화 가 오 검 사 를 일 으 킬 수 있 고 한계 가 있다.

import cv2
import numpy as np

camera = cv2.VideoCapture(0) #   0        
#         
if (camera.isOpened()):
  print('Open')
else:
  print('      ')

#    ,    size
size = (int(camera.get(cv2.CAP_PROP_FRAME_WIDTH)),
    int(camera.get(cv2.CAP_PROP_FRAME_HEIGHT)))
print('size:'+repr(size))

es = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (9, 4))
kernel = np.ones((5, 5), np.uint8)
background = None

while True:
  #      
  grabbed, frame_lwpCV = camera.read()
  #        ,     ,       。
  #            ,       :              、                   。                         。
  gray_lwpCV = cv2.cvtColor(frame_lwpCV, cv2.COLOR_BGR2GRAY)
  gray_lwpCV = cv2.GaussianBlur(gray_lwpCV, (21, 21), 0)

  #               
  if background is None:
    background = gray_lwpCV
    continue
  #                           ,        (different map)。
  #                 ,          (dilate)  ,    (hole)   (imperfection)       
  diff = cv2.absdiff(background, gray_lwpCV)
  diff = cv2.threshold(diff, 25, 255, cv2.THRESH_BINARY)[1] #        
  diff = cv2.dilate(diff, es, iterations=2) #      

  #      
  image, contours, hierarchy = cv2.findContours(diff.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) #                
  for c in contours:
    if cv2.contourArea(c) < 1500: #       ,            ,             。                           
      continue
    (x, y, w, h) = cv2.boundingRect(c) #            
    cv2.rectangle(frame_lwpCV, (x, y), (x+w, y+h), (0, 255, 0), 2)

  cv2.imshow('contours', frame_lwpCV)
  cv2.imshow('dis', diff)

  key = cv2.waitKey(1) & 0xFF
  #  'q'     
  if key == ord('q'):
    break
# When everything done, release the capture
camera.release()
cv2.destroyAllWindows()
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기