160121_한상훈.

Download Report

Transcript 160121_한상훈.

Pride
Power
P3 in VISION laboratory…
Passion
4nd week Presentation
Vision System Lab, Sang-Hun Han
Plan
• 주차 별 일정
Week
Class
발표자
1주차
Introduction, VS C++ 1
한상훈
2주차
VS C++ 2, MFC 1
한상훈
3주차
MFC 2
한상훈
4주차
MFC 3
한상훈
5주차
OpenCV 1
한상훈
6주차
OpenCV 2
한상훈
8주차
영상처리 1
한상훈
9주차
영상처리 2
한상훈
OpenCV
• OpenCV(Open Computer Vision)
– 오픈 소스 컴퓨터 비전 C 라이브러리이다. 원래는 인텔이 개발하였다.
– 윈도우, 리눅스 등의 여러 플랫폼에서 사용할 수 있으며 실시간 이미지 프로세싱에
중점을 둔 라이브러리이다.
OpenCV
• Visual Studio with OpenCV
– Visual Studio 15 에서의 설치
– OpenCV 홈페이지 : opencv.org
OpenCV
• Visual Studio with OpenCV
– OpenCV 다운로드 후 설치
•
•
대부분 압축파일, 간혹 설치를 해주는 버전이 존재
CMake 프로그램을 통해 빌드를 해주면 OpenCV에서 제공해주는 예제들이 실행 가능
OpenCV
• Visual Studio with OpenCV
– Visual Studio 2015 에서의 환경 구축
– 대화 상자 기반의 응용프로그램 생성
OpenCV
• Visual Studio with OpenCV
– 프로젝트->속성
OpenCV
• Visual Studio with OpenCV
– Visual Studio 2015 에서의 환경 구축
OpenCV
• Visual Studio with OpenCV
– Visual Studio 2015 에서의 환경 구축
OpenCV
• Visual Studio with OpenCV
– 모든 구성에서 구성 속성 -> C/C++ -> 전처리기
– _CRT_SECURE_NO_WARNINGS
OpenCV
• Visual Studio with OpenCV
– Visual Studio 2015 에서의 환경 구축
opencv_calib3d2411d.lib
opencv_contrib2411d.lib
opencv_core2411d.lib
opencv_features2d2411d.lib
opencv_flann2411d.lib
opencv_gpu2411d.lib
opencv_highgui2411d.lib
opencv_imgproc2411d.lib
opencv_legacy2411d.lib
opencv_ml2411d.lib
opencv_nonfree2411d.lib
opencv_objdetect2411d.lib
opencv_ocl2411d.lib
opencv_photo2411d.lib
opencv_stitching2411d.lib
opencv_superres2411d.lib
opencv_ts2411d.lib
opencv_video2411d.lib
opencv_videostab2411d.lib
Debug
opencv_calib3d2411.lib
opencv_contrib2411.lib
opencv_core2411.lib
opencv_features2d2411.lib
opencv_flann2411.lib
opencv_gpu2411.lib
opencv_highgui2411.lib
opencv_imgproc2411.lib
opencv_legacy2411.lib
opencv_ml2411.lib
opencv_nonfree2411.lib
opencv_objdetect2411.lib
opencv_ocl2411.lib
opencv_photo2411.lib
opencv_stitching2411.lib
opencv_superres2411.lib
opencv_ts2411.lib
opencv_video2411.lib
opencv_videostab2411.lib
Release
OpenCV
• Visual Studio with OpenCV
OpenCV
• Visual Studio with OpenCV
MFC with OpenCV
• stdafx.h에서 아래와 같이 헤더파일 추가
• highgui.h, cxcore.h, cv.h 3개의 헤더파일 추가
MFC with OpenCV
• 리소스뷰에서 다이얼로그 선택하여 더블클릭
MFC with OpenCV
• 그림2와 같이 다이얼로그 박스에 있는 기본적인 Static Text, 확인 버튼,
취소 버튼을 삭제
• 도구상자에서 Static Text 선택하여 원하는 크기만큼 드래그하여 생성
그림 1
그림 2
MFC with OpenCV
• 생성한 Static Text의 속성을 선택하여 ID는 IDC_STATIC_DISPLAY로
설정
• Caption은 빈 내용으로 설정
MFC with OpenCV
• 도구상자에서 button 선택하여 button 생성
• button의 속성에서 ID는 IDC_BUTTON_CONNECT로 설정
• button의 속성에서 Caption은 Connect로 설정
MFC with OpenCV
• 프로젝트명Dlg.h(MFCSeminarDlg.h) 에서 웹캠(카메라)과의 연결을 위
한 포인터와 영상을 저장할 포인터를 생성
• 웹캠(카메라)가 연결되었는지 확인할 flag 생성
MFC with OpenCV
• 프로젝트명Dlg.cpp(MFCSeminarDlg.cpp) 에서 웹캠(카메라)과의 연결
을 위한 포인터와 영상을 저장할 포인터를 초기화
• 초기화는 OnInitDialog() 함수에서 초기화 작업 수행
MFC with OpenCV
• 프로젝트명Dlg.h(MFCSeminarDlg.h) 에서 이미지를 뿌려줄 공간 정보
를 위한 CRect 자료형과 DC를 생성
– DC(Device Context) : GDI(Graphics Device Interface)를 추상화한 객체
• 초기화를 위한 함수 추가
MFC with OpenCV
• 프로젝트명Dlg.cpp(MFCSeminarDlg.cpp) 에서 생성한 Init함수 구현
– 각 포인터들 초기화
– 이미지를 뿌려줄 공간(IDC_STATIC_DISPLAY) 정보 획득
– 이미지를 뿌려주기 위한 DC 생성
MFC with OpenCV
• 아래 그림과 같이 클래스 마법사를 통해 다이얼로그가 끝날 때를 위한
함수 생성
MFC with OpenCV
• OnDestroy 함수 구현(프로젝트명Dlg.cpp)
– 초기화 함수에서 생성한 포인터나 DC 메모리들을 해제해줌
• 타이머 생성
• 클래스마법사를 통해서 WM_TIMER 더블클릭하여 생성
– 일정시간(지정하는 시간)이 지난 후에 원하는 동작을 하기 위해 사용
MFC with OpenCV
• 리소스뷰에서 다이얼로그를 다시 띠우고 생성한 버튼(Connect)를 더블
클릭하여 버튼의 함수를 생성
MFC with OpenCV
• 버튼의 함수 구현
– m_Capture = cvCaptureFromCAM(0); 은 현재 인식된 웹캠을 찾는 역할, 찾았을 경
우 m_Capture 의 값이 0이 아니게 됨
– cvCaptureFromCAM(0); 에서 0은 Index로 여러 대의 캠이 있거나 인식되었을 경우
숫자를 바꿔줌으로써 원하는 캠을 찾을 수 있음
– SetTimer(0, 33, NULL); 은 타이머를 설정(ID = 0, 33ms마다, 실행하고자 하는 함수
명(NULL일 경우 OnTimer로 설정))
– KillTimer(0); 는 ID = 0 인 타이머를 멈춤
MFC with OpenCV
• 자신이 구현할 함수나 변수들을 위한 클래스 구현
MFC with OpenCV
• 자신이 구현할 함수나 변수들을 위한 클래스 구현
MFC with OpenCV
• 자신이 구현할 함수나 변수들을 위한 클래스 구현
MyClass.h
MyClass.cpp
• 프로젝트명Dlg.h(MFCSeminarDlg.h) 에 자신이 생성한 클래스의 헤더
파일 삽입
MFC with OpenCV
• 자신이 생성한 클래스에 이미지를 그려주기 위한 함수 생성
– ShowImage 함수는 IplImage와 그려주고자 하는 위치, 크기 정보를 인자로 다이얼로
그에 뿌려주는 역할
– FillBitmapInfo 함수는 ShowImage 함수의 내부에서 수행되며 ShowImage 함수에서
받은 IplImage를 Bitmap으로 변환해주는 역할 수행
MFC with OpenCV
• MyClass.cpp 에 ShowImage 함수 구현
– IplImage를 Bitmap으로 변환해주기 위한 Bitmap 버퍼 생성 및 FillBitmapInfo 함수를
통해 Bitmap으로 변환
– SetDIBitsToDevice 함수를 통해 Bitmap을 다이얼로그에 그려줌
MFC with OpenCV
• MyClass.cpp 에 FillBitmapInfo 함수 구현
– IplImage 정보를 통해 Bitmap 형식에 맞게 버퍼에 옮김
MFC with OpenCV
• 프로젝트명Dlg.h(MFCSeminarDlg.h) 에 자신이 생성한 클래스의 객체
명 생성
• 프로젝트명Dlg.cpp(MFCSeminarDlg.cpp) 의 Init 함수에 클래스 객체
인스턴스 생성 및 OnDestroy() 함수에서 해제
MFC with OpenCV
• 프로젝트명Dlg.cpp(MFCSeminarDlg.cpp) 의 OnTimer 함수 구현
– 크기는 320x240으로 설정(변경 가능)
MFC with OpenCV
• 디버그 및 실행하면 다음과 같은 에러 발생
– OpenCV_core2411d.dll과 같은 dll 파일들은 아래의 주소에 존재
– C:\OpenCV2.4.11\build\x86\vc12\bin
– 자신의 프로젝트 생성한 위치에 복사
MFC with OpenCV
• 디버그 및 실행하면 다음과 같은 에러 발생
– MSVCP120D.dll과 같은 dll 파일들은 세미나 게시판에서 다운
– 자신의 프로젝트 생성한 위치에 복사
MFC with OpenCV
• 디버그 및 실행