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 • 디버그 및 실행