1. OpenCV 2.0 소개 및 설치 1.

Slides:



Advertisements
Similar presentations
1.1 구조체란 1.2 중첩 구조체 1.3 구조체와 배열 1.4 구조체와 포인터 1.5 구조체와 함수 1.6 공용체와 열거형.
Advertisements

Number Recognizer. Team 이성우 컴퓨터소프트웨어학과 조윤성 전자통신공학과
1 파일 및 폴더 다루기 A. 파일이란 : 응용프로그램을 이용해서 만든 사용자가 만든 정보의 집합 - 파일 형식 : 이름과 확장자로 이뤄짐 예 sample.txt 샘플.txt - 복원하려면 휴지통에서 파일선택 후 드래그해서 밖으로 이동 혹은 RESTORE B. 확장자의.
1 구조체 윤 홍 란 컴퓨터 프로그래밍 2 구조체 정의  구조체란 ? o 서로 다른 형의 변수들을 하나로 묶어주는 mechanism. (cf. 배열 : 같은 형의 변수들을 하나로 묶어주는 mechanism) o 예 : 카드의.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
이정훈 전한배. 1. What is Image Processing? 2. Image Making 3. Application 4. OpenCV Outline.
Multimedia Programming 04: Point Processing Departments of Digital Contents Sang Il Park.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
Image & Video processing
제 9 장 구조체와 공용체.
컴퓨터 프로그래밍 기초 [Final] 기말고사
Multimedia Programming 04: 점, 선, 면
자료 구조: Chapter 3 (2)구조체, 포인터
Red Color Detection Course ChanYoung Kim
나민영 서경대학교 컴퓨터공학과 CGVR Lab 같이만들어보자 5주차 OpenCV 설정 및 기초.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
Red Color Detection Course ChanYoung Kim
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
Number Recognizer.
5장. 참조 타입.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
07. 디바이스 드라이버의 초기화와 종료 김진홍
Multimedia Programming 03: 점, 선, 면
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
C / C++ Programming in multi platform
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
DSP Lab. Week 3 My image Doug Young Suh Media Lab. Rm401
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
23장. 구조체와 사용자 정의 자료형 2.
Multimedia Programming 02: Play with Images
WinCE Device Driver 실습 #3
WinCE Device Driver 실습 #2
홈페이지용 그림 활용법 그림 삽입 태그 <IMG> 배경 그림 다루기 그림과 문자열의 어울림
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
TCP/IP Socket Programming…
11장. 1차원 배열.
C#.
Opencv 이민권.
OpenCV Tutorials Dongchul Kim Media System Lab., Yonsei University
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
인터넷응용프로그래밍 JavaScript(Intro).
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
영상처리 실습 인공지능연구실.
24장. 파일 입출력.
Lesson 2. 기본 데이터형.
Red Color Detection Course ChanYoung Kim
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
OPENCV를 이용한 이미지처리 정은일 멀티미디어설계
박정식 심규동 OpenCV 기초 박정식 심규동
ASP.NET AJAX / AJAX Control Toolkit 응용 2008 컴퓨터공학실험( I )
Python 및 OpenCV 설치.
객체기반 SW설계 팀활동지 4.
데이터 동적 할당 Collection class.
OpenCV 설정 2.21 만든이 딩딩.
DK-128 개발환경 설정 아이티즌 기술연구소
발표자 : 이지연 Programming Systems Lab.
구조체(struct)와 공용체(union)
Numerical Analysis Programming using NRs
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
06. 디바이스의 등록과 해제 김진홍
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
7 생성자 함수.
6 객체.
Presentation transcript:

1. OpenCV 2.0 소개 및 설치 1

목 차 영상처리 OpenCV 소개 OpenCV 2.0 설치 코드 규칙 기본 데이터 타입 행렬과 영상 타입 목 차 영상처리 OpenCV 소개 OpenCV 2.0 설치 코드 규칙 기본 데이터 타입 행렬과 영상 타입 CvMat 행렬 구조체 IplImage 구조체

What is OpenCV? OpenCV 목표 의미: Open Source Computer Vision Library 500여개 이상의 함수와 알고리즘들: Computer vision Image processing (영상처리) 이외 일반적인 목적의 함수들 효율적이며 가볍다 (C/C++) Absolutely free! 목표 기본적인 비전 기반 구조를 위한 소스 코드 공개를 통하여 비전 연구의 발전 비전 응용프로그램 개발을 위한 공통 기반 구조를 제공하여 비전 지식을 보급 이식성이 좋고, 성능이 최적화된 소스 코드를 공개하여 비전 기반 상업용 응용프로그램의 발전

Who did make this? 1999년부터 Intel 사가 개발 Available on Windows, Linux and MacOSX. 많은 회사들과 리서치 센터 등에서 폭넓게 사용 중 Home page: www.intel.com/technology/computing/opencv/

OpenCV 주된 활용 분야 Computer Human Interaction (HCI) Object Identification Segmentation and Recognition Face Recognition Gesture Recognition Motion Tracking Motion Understanding And so on.

프로그램 받는 곳 중요!: Version은 1.0을 사용합니다 Download 직접링크 (click) http://sourceforge.net/projects/opencvlibrary 중요!: Version은 1.0을 사용합니다 Download 직접링크 (click)

영상처리 이미지

OpenCV OpenCV 구조 CV : 기본적인 영상 처리와 고수준의 컴퓨터 비전 알고리즘 MLL : 다양한 통계 분류와 군집화 도구 등의 기계 학습 라이브러리 HighGUI : 입출력에 관련된 함수들과 영상과 비디오를 불러오고 저장 CXCORE : 기본적인 자료 구조와 알고리즘

OpenCV OpenCV 관련 사이트 공식 OpenCV 사이트 http://opencv.willowgarage.com/wiki/ 한국 커뮤니티 http://opencv.co.kr/ 야후 커뮤니티 http://tech.groups.yahoo.com/group/OpenCV/ 공식 레퍼런스 http://opencv.willowgarage.com/documentation/cpp/index.html 다운로드 http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.0/ OpenCV 2.0에 추가 기능 http://cafe.naver.com/opencv/10600

OpenCV 설치 OpenCV 2.0 다운 & 설치 CMake 다운 & 설치 CMake(cmake –gui) 실행 http://sourceforge.net/projects/opencvlibrary/ CMake 다운 & 설치 http://www.cmake.org/cmake/resources/software.html CMake(cmake –gui) 실행

OpenCV 설치 Cmake 설정 경로 설정 Source code 위치 빌드한 파일을 저장할 위치 Configure 버튼 클릭 빌드 설정 자신에게 맞는 compile 버전 선택 BUILD_EXAMPLES 체크 Generate 버튼 클릭

OpenCV 설치 프로젝트 빌드 프로젝트 열기 Release 모드로 변경 프로젝트 Build 결과 확인

OpenCV 설치 VC++ 디렉토리 설정 포함 파일(include file) 지정 라이브러리 파일(library file) 지정

OpenCV 설치 프로젝트 생성 및 설정 새 프로젝트 생성 Win32 콘솔 프로젝트 선택 빈 프로젝트 체크 프로젝트>속성 선택 추가 종석성 입력

OpenCV 설치 프로젝트 실행 dll 파일 복사 이미지 파일 복사 Source 파일 추가 Source 입력 실행

예제 프로그램 구조체 이미지에서 Pixel값으로의 접근 IpImage, CvScalar 이미지 불러오기 그리기 함수 이미지 영역 검출 (red 영역 검출)

구조체: 관련된 정보를 그룹화하여 표현 구조체 (structure) ? 하나의 물건(객체)가 여러 요소로 구성되어 있을때 효율적으로 표현하기 Example) 학생: 이름, 학번, 주소, 전화번호,… 성적: 국어점수, 수학점수, 영어점수, 총점, 평균 구조체: 관련된 정보를 그룹화하여 표현

구조체 (structure) 구조체: 관련된 정보를 그룹화하여 표현 구조체 이름 학생 이름 학번 주소 전화번호 멤버 변수

struct student { char name[30]; int number; float grade; }; 구조체의 정의 Example) struct student { char name[30]; int number; float grade; };

구조체변수이름.맴버변수이름 멤버로의 접근 struct score { int korean; int math; }; score a; a.korean = 30; a.math = 80;

픽셀(Pixel: Picture Element) 이미지:픽셀의 집합 비트맵(Bitmap)

픽셀 픽셀의 색: 적색(Red), 녹색(Green), 청색(Blue) 컬러의 수  픽셀 당 비트 수(밝기 레벨)

x y Pixel의 값 = (위치, 색) 위치 : 각 픽셀의 2D 좌표 (Image Coordinate System) 색 : CvScalar (색을 저장하는 구조체) x y (0,0) (8,2)

Image structure (이미지 구조체) IplImage (Image Processing Library) typedef struct _IplImage { int nSize; /* size of iplImage struct */ int ID; /* image header version */ int nChannels; int alphaChannel; int depth; /* pixel depth in bits */ char colorModel[4]; char channelSeq[4]; int dataOrder; int origin; int align; /* 4- or 8-byte align */ int width; int height; struct _IplROI *roi; /* pointer to ROI if any */ struct _IplImage *maskROI; /*pointer to mask ROI if any */ void *imageId; /* use of the application */ struct _IplTileInfo *tileInfo; /* contains information on tiling*/ int imageSize; /* useful size in bytes */ char *imageData; /* pointer to aligned image */ int widthStep; /* size of aligned line in bytes */ int BorderMode[4]; /* the top, bottom, left, and right border mode */ int BorderConst[4]; /* constants for the top, bottom,left, and right border */ char *imageDataOrigin; /* ptr to full, nonaligned image */ } IplImage;

IplImage 구조체 데이터 구조 CvMat를 상속하며 영상을 표현하기에 적합한 추가 항목들을 가지고 있음.

Image I/O (이미지 입출력) IplImage* cvLoadImage(image_path); 파일로 부터 이미지를 읽는다. 성공할 경우 메모리가 생성되고 IplImage pointer를 반환 실패할 경우 NULL 값을 리턴 cvSaveImage(image_path, IplImage *); 이미지를 파일로 저장한다. 형식은 확장자로 부터 결정 cvReleaseImage(IplImage **); 이미지를 저장하고 있던 메모리를 해제한다. BMP, JPEG, PNG, TIFF, PPM/PGM 포멧등이 지원됨

Image I/O (이미지 입출력) 이미지의 포멧을 바꾸어 저장하기 예: IplImage* img = cvLoadImage(“picture.jpg”); if( img != NULL ) cvSaveImage( “picture.bmp”, img );

Windows cvNamedWindow(window_name); 윈도우를 생성한다. 윈도우는 이름을 부여할 수 있고, 각 이름을 기준으로 구분한다. cvNamedWindow(“ViewA”); cvMoveWindow(“ViewA”,300,100); cvDestroyWindow(“ViewA”); … cvShowImage(window_name, IplImage *); 주어진 이름에 해당하는 윈도우에 이미지를 보여준다. 한 이미지만을 보여 줄 수 있으며, 부분 적인 출력은 하지 못한다. cvDestroyWindow(window_name); 주어진 이름에 해당하는 윈도우를 없앤다.

색을 저장하는 변수: CvScalar 4 개 이하의 숫자를 저장할 수 있도록 만든 구조체 0번은 blue, 1번은 green, 2번은 red 값을 저장 Example) CvScalar s; s.val[0] = 200; (Blue) s.val[1] = 11; (Green) s.val[2] = 123; (Red) struct CvScalar { double val[4]; };

이미지에서 Pixel값으로의 접근 주의: 반드시 x,y는 이미지 범위 내부에 있어야함! CvScalar cvGet2D (IplImage*, y, x) (x,y)에서의 칼라 값 얻기. Example) CvScalar s; s = cvGet2D(img, 30, 40); void cvSet2D (IplImage*, y, x, CvScalar) (x,y)에서의 칼라 값 변경 Example) CvScalar s = cvScalar(100,0,0); cvSet2D(img, 30, 40, s); 또는 cvSet2D(img, 30, 40, cvScalar(100,0,0)); 주의: 반드시 x,y는 이미지 범위 내부에 있어야함! (image의 width와 height를 정보를 참조할것)

예제 프로그램 이미지 불러오기 // OpenCV 를 이용하여 이미지를 읽어들이는 소스코드 입니다. // 파일 구조를 모르더라도 함수를 통해 JPG, BMP, PNG, TIF 등을 열 수 있습니다. // Debug 모드나 Release 모드 모두 셋팅 되어 있습니다. #include <cv.h> #include <highgui.h> void main() { IplImage* image = 0; image = cvLoadImage("t9t9.jpg", 1); cvNamedWindow( "T9-viewer", 1); cvShowImage( "T9-viewer", image ); cvWaitKey(0); cvDestroyWindow( "T9-viewer" ); }

예제 프로그램 그리기 함수

예제 프로그램 이미지 영역 검출 (red 영역 검출) char c; int x, y , B ,G ,R; for ( int i = 0 ; i < image->height ; i++) { for( int j = 0 ; j < image->width ; j++) { CvScalar v = cvGet2D(image, i , j ); B = v.val[0];// 이미지에 j,i 좌표의 Blue 성분 추출 G = v.val[1]; // 이미지에 j,i 좌표의 Green 성분 추출 R = v.val[2]; // 이미지에 j,i 좌표의 Red 성분 추출 // if(B > 130 && B-G > 20 && B-R > 20) if(R > 200 && R-G > 70 && R-B > 70) // 임의의 빨간색 조건 { x = j; y = i; cvRectangle(image, cvPoint(x,y), cvPoint(x+4,y+4), cvScalar(255,0,0), 2,8,0);// 만족하는 경우 사각형을 그려주게 됨 . }

코드 규칙 접두사 cv : 함수명 (cvLoadImage, cvNormalizeHist) CV or IPL : 상수 (CV_8UC1,CV_32FC2, IPL_DEPTH_1U) Cv : 데이터 구조 (CvMat, CvArr, CvPoint) 함수 규칙 : cv<Action><Target><Mod>(…) 예제 : cvNormalizeHist, cvLoadImage cvGetHistValue_1D, cvCalibrateCamera_64d

코드 규칙 상수 규칙 : IPL_DEPTH_<bit_depth>(S|U|F), CV_<bit_depth>(S|U|F)C<channels> bit_depth : 1,8,16,32 S : signed integer, U : unsigned integer, F : float channerls : 채널 개수 예제 : IPL_DEPTH_1U : 1비트 양의 정수 영상 CV_32FC2 : 두개 채널을 갖는 32비트 실수형 데이터 데이터 구조 규칙 : Cv<Data Structure> Mat : Matrix Arr : Array Point : Point 예제: CvMat, CvPoint, CvPoint2D32f

기본 데이터 타입 CvPoint CvSize CvRect CvScalar 이미지에서의 x,y 좌표를 나타낼 때 CvSize width, hight를 이용하여 이미지의 크기를 표현 할 때 CvRect 이미지 내의 특정 사각형 공간을 정의 할 때 CvScalar RGBA 색상을 표현 하기 위해 사용 각 데이터 타입은 cvPoint(), cvSize(), cvRect(), cvScalar() 등의 인라인 생성자 함수를 이용하여 사용 가능

기본 데이터 타입 예제

행렬과 영상 타입 IplImage IplImage 구조 영상을 표현하는 데이터 타입 그레이영상, 컬러영상, 4채널 영상(RGB+알파)를 표현 가능 각 채널은 정수, 실수형 데이터를 저장 할 수 있음 IplImage 구조 객체 지향적 구조 구성 CvArr는 CvMat의 추상 기반 클래스, IpllImage는 CvMat를 상속 CvArr* 타입이 사용된 자리에는 CvMat* 또는 IplImage* 타입을 대체해서 사용 할 수 있음

CvMat 행렬 구조체 구조체 정의

CvMat 행렬 데이터 접근 간편한 방법 1차원 또는 2차원 행렬을 다룰 때 사용 매번 호출할 때마다 주소값 계산을 반복 간편하지만 비효율적

CvMat 행렬 데이터 접근 엄격한 방법 다차원 배열도 지원 cvPtr* 은 포인터를 반환 cvGet* 실제 데이터를 반환 하지만 속도가 느림

CvMat 행렬 데이터 접근 엄격한 방법

CvMat 행렬 데이터 접근 적절한 방법 연속적인 데이터 접근에 효율적 정확한 오프셋은 행렬의 step 멤버값을 이용해서 구함 포인터 주소를 역참조 할 때, 원하는 타입에 해당하는 공용체 멤버를 선택

점들의 배열 메모리에서 점들의 구성

IplImage 구조체 데이터 구조 CvMat를 상속하며 영상을 표현하기에 적합한 추가 항목들을 가지고 있음.

IplImage 구조체 데이터 접근 CvMat과 유사

ROI ROI 자신이 원하는 특정 영역만 작업을 수행 하고자 할 경우

ROI WidthStep을 이용한 관심영역 프로세싱 한 이미지에서 여러 개의 관심 영역을 설정 할 수 있음