Computer Vision/opencv(python) 70

[69] 7) 밀집 오티컬플로우

파네백 옵티컬 플로우 계산 코드 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으..

[68] 6) 루카스-카나데 옵티컬플로우

옵티컬플로우 (Optical flow)란? 연속하는 두 프레임(영상)에서 카메라 또는 객체의 움직임에 의해 나타나는 객체의 이동 정보 패턴 옵티컬플로우 계산 OpenCV 옵티컬플로우 계산 함수 루카스-카나데 옵티컬플로우 예제 import sys import numpy as np import cv2 src1 = cv2.imread('frame1.jpg') src2 = cv2.imread('frame2.jpg') if src1 is None or src2 is None: print('Image load failed!') sys.exit() gray1=cv2.cvtColor(src1,cv2.COLOR_BGR2GRAY) pt1=cv2.goodFeaturesToTrack(gray1,50,0.01,10) # 코너 ..

[67] 5) 캠시프트 알고리즘

캠시프트(CamShift)란? Continuously Adaptive Mean Shift 추적하는 객체의 크기가 변하더라도 검색 윈도우의 크기가 고정되어 있는 평균 이동 알고리즘의 단점을 보완 추적하는 객체의 크기가 변하더라도 검색 윈도우의 크기가 고정되어 있는 평균 이동 알고리즘의 단점을 보완 캠시프트 동작 방법 우선 평균 이동 알고리즘으로 이동 위치 계산 윈도우 크기를 조정 특징 공간을 가장 잘 표현하는 타원 검출 새로운 크기의 윈도우를 이용하여 다시 평균 이동 수행캠시프트(CamShift)란? Continuously Adaptive Mean Shift 추적하는 객체의 크기가 변하더라도 검색 윈도우의 크기가 고정되어 있는 평균 이동 알고리즘의 단점을 보완 import sys import numpy a..

[66] 4) 평균 이동 알고리즘

Detection vs Recognition vs Tracking 평균 이동 (Mean shift) 알고리즘 이란? A non-parametric feature-space analysis technique for locationg the maxima of a density function 국지적 평균을 탐색하면서 이동 모드 검출(mode seeking) 알고리즘 평균 이동 알고리즘을 이용한 관심 영역 추적 평균 이동 알고리즘을 이용한 트래킹 cv2.meanShift(probImage,window,criteria) -> retval,window • probImage : 관심 객체에 대한 히스토그램 역투영 영상 (확률 영상) • window: 초기 검색 영역 윈도우 & 결과 영역 반환 • criteria: ..

[65] 3) 배경 차분 : MOG 배경 모델

MOG 란? Minture of Gaussian, GMM(Gaussian Mixture Mode) 각 픽셀에 대해 MOG 확률 모델을 설정하여 배경과 전경을 구분 다양한 배경 모델 구성 방법 OpenCV 에서 제공하는 배경 추정 알고리즘 BackgroundSubtractorMOG2 클래스 생성 함수 cv2.createBackgroundSubtractorMOG2(history=None, varThreshold=None, detectShadows=None) -> dst • history: 히스토리 길이 . 기본값은 500. • varThreshold : 픽셀과 모델 사이의 마할라노비스 거리 (Mahalanobis distance) 제곱에 대한 임계값 . 해당 픽셀이 배경 모델에 의해 잘 표현되는 지를 판단 ..

[64] 2) 배경 차분: 이동 평균 배경

정적 배경 모델 사용 시 문제점 미리 등록된 기준 영상이 실제 배경과 크게 달라질 경우 오동작 ex) 그림자 등의 영향으로 인한 조도 변경, 새로운 객체가 화면에 고정될 경우 평균 연산에 의한 배경 영상 생성 움직이는 객체가 존재하는 수백 장의 입력 영상으로부터 평균 영상을 구하면? --> 수백 장의 이전 프레임을 버퍼에 저장하려면 대용량 메모리가 필요하다 이동 평균(Moving average)이란? 수백 장의 영상을 저장하는 대신 매 프렝미이 들어올 때마다 평균 영상을 갱신 대용량 버퍼 메모리가 필요하지 않다 이동 평균 계산을 위한 가중치 누적 함수 cv2.accumulateWeighted(src,dst,alpha,mask=None) -> dst • src: 입력 영상. 1 또는 3채널. 8비트 또는 ..

[63] 10.객체 추적과 모션 벡터 1) 배경 차분: 정적 배경 차분

배경 차분(Background Subtraction:BS) 등록된 배경 모델과 현재 입력 프레임과의 차영상을 이용하여 전경 객체를 검출 움직이는 전경 객체 검출을 위한 기본적인 방법 정적 배경을 이용한 전경 객체 검출 처음 프레임을 배경으로 설정하고 이후 들어오는 영상과의 차이를 비교하는 방법은 그렇게 까지 좋은방식은 아니다. 이 방식은 조명의 변화, 예를 들어서 그림자가 지거나 해의 밝이에 따라 민감하게 반응하고 자동차가 새롭게 들어와서 주차를 했는데도 계속 검출이 되기 때문에 배경모델을 점진적으로 업데이트를 해서 조금 더 적응하는 형태로 동작시키는 방법이 더 좋다 import sys import numpy as np import cv2 # 비디오 파일 열기 cap = cv2.VideoCapture('..

[62] (실습) AR 비디오 플레이어

AR 비디오 플레이어 카메라 프레임이 특정 영상이 나타나면 해당 위치에 동영상을 재생하는 기능 구현할 기능 기준 영상과 카메라 프레임 사이의 특징점 검출 및 매칭 호모그래피 계산 동영상 프레임 투시 변환 & 합성 구현 방법 import sys import numpy as np import cv2 # 기준 영상 불러오기 src = cv2.imread('box.png', cv2.IMREAD_GRAYSCALE) if src is None: print('Image load failed!') sys.exit() # 카메라 장치 열기 cap1 = cv2.VideoCapture(0) if not cap1.isOpened(): print('Camera open failed!') sys.exit() # 필요할 경우 카메..

[61] 7) 이미지 스티칭

이미지 스티칭(Image Stitching) 이란? 동일 장면의 사진을 자연스럽게 붙여서 한 장의 사진으로 만드는 기술 사진 이어 붙이기, 파노라마 영상 이미지 스티칭 객체 생성 cv2.Stitcher_create(mode=None) -> retval • mode: 스티칭 모드 . cv2.PANORAMA 또는 cv2.SCANS 중 하나 선택. 기본값은 cv2.PANORMA • retval: cv2.Stitcher 클래스 객체 이미지 스티칭 함수 cv2.Stitcher.stitch(images,pano=None) -> retval,pano • images: 입력 영상 리스트 • retval: 성공하면 cv2.Stitcher_OK. • pano: 파노라마 영상 이미지 스티칭 예제 import sys impo..