본문 바로가기

언어/Python

python으로 openCV 활용 (동작감지)

반응형

OpenCV란 무엇인가

OpenCV 개요

OpenCV = Open Source Computer Vision Library

영상 처리와 컴퓨터 비전 관련 오픈 소스 라이브러리로 2,50개가 넘는 알고리즘으로 구성되어 있다. 이것은 영상 처리, 컴퓨터 비전 및 기계 학습과 관련된 전통적인 알고리즘 뿐만 아니라 최첨단 알고리즘을 갖추고 있다. 이 알고리즘들은 얼굴 검출과 인식, 객체 인식, 객체의 3D 모델 추출, 스테레오 카메라에서 3D 좌표 생성, 고해상도 영상 생성을 위한 이미지 스티칭, 영상 검색, 적목 현상 제거, 안구 운동 추적 등 다양한 응용 분야에 사용된다.


간단하게 말해서 오픈소스입니다. 영상처리가 매우 복잡함 알고리즘인데 공개된 소스로 쉽게 접근할수 있는것 같습니다. 

오늘 알려드릴거는 이미지 2개를 비교하는 MSE 라는 함수를 이용해서 현재 카메라앞에 동작이 있는지 없는지를 판단하는 방법입니다.


MSE 라는 함수에 대해서 알아보도록 하겠습니다.

Mean Squared Error vs. Structural Similarity Measure 
알고리즘 이름입니다. 오차와 구조적 유사성을 알아내는 함수입니다. 수학적으로 나타낸값입니다. 

 

밑에 mse 함수는 이미지를 2개받아서 위에 수학적알고리즘을 프로그래밍한것입니다.
mse값은 0에 수렴할수록 같은 이미지라고 생각 하셔도 좋습니다.
이때 들어가는 image값은 색갈이있는 채도 보단 회색으로 하시는게 정확성이 더욱도 올라갑니다.

 

이젠 비교할 이미지를 받는 방법입니다.

비교할 이미지 두개는 original_image 와 compare_image 입니다 두개의 mse 값이 300이상이면

움직임이 있다고 판다하게 됩니다.

count_image = 0 // 촬영중인 영상의 카운터를 셉니다 10

original_image에 영상을 찍고
while 문으로 들어가 compare_image를 계속 생산 하게됩니다. 그리고 original과 compare 이미지를 두개의 mse값을 계속 계산합니다 이때 300이 넘으면  동작을 인식햇다고 감지하게 됩니다.

그럼 처음 original 이미지는 처음찍힌 영상 그대로인데 이문제를 해결하기 위해 count_image가 10이 될때마다 compar_image 값을 original_image 값에다 저장하고 위에 반복을 다시하게 됩니다. 그러면 약 3초간격으로 이미지가 다르다는것을 인식하고 동작을 인식하게 됩니다.

반응형