2014년 10월 27일 월요일

웹캠(PC캠)을 통한 움직임 감시

CatchMan_Demo.zip
MotionDetection_new.zip
MotionDetection.zip

MotionDetection은 내가 만든 프로젝트로, CFrameGrabber라는 클래스(프로젝트)를 이용해서 만들었으며, CxImage 라이브러리를 이용해서, 움직임을 JPG로 저장한다.(말이 만든거지...전부 Copy&Paste..-_-;)

CatchMan이라는 프로젝트는 데브피아(http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=278&MAEULNo=20&no=17903&ref=17903)에 올라온 소스로, 똑같은 기능을 한다.

차이점이라면 MotionDetection은 프리뷰모드(capPreview)를 사용하지 않고,캠을 통해서 들어오는 데이터를 capGrabFrameNoStop을 이용해 프레임 버퍼에 채워주고 보여준다. 보여지는 영상은 imagedata라는 변수에 BMP로 저장된다.
이 BMP데이터를 받아서 CBitmapEx 클래스를 통해, BMP로 저장한다. 이 BMP를 CxImage를 통해 JPG로 변환한다.
CFrameGrabber클래스에서 영상을 보여주고, 다이얼로그소스에서 화면을 갱신해준다. 타이머에서 이미지 데이터를 저장하면서, 이전에 저장됐던 내용과 틀리면, 움직임이 발생한 것으로 판단하여, 이미지를 디스크에 저장한다.

1월12일 수정
MotionDetection 프로젝트를 수정했다.(MotionDetection_new.zip) CBitmapEx 클래스가 24비트와 32비트만 지원하는 바람에, 그냥 capFileSaveDIB() 매크로를 이용하여 BMP로 저장하도록 바꿨다. 그외에 달라진 점은 없다.

MotionDetection 프로젝트는 유니코드로 빌드된다. 압축파일에 포함되어 있는 CxImage 라이브러리가 유니코드 라이브러리이므로, 유니코드로 빌드할 것!

CatchMan은 프리뷰모드를 이용해서 영상을 보여주고, capFileSaveDIB()매크로를 이용해, BMP로 저장한다.

뭐 코드를 보니까 다 거기서 거기인데...CatchMan이 더 직관적인 코드인 것 같다.

둘다 보면서 공부할만한 내용.

댓글 없음: