Download presentation
Presentation is loading. Please wait.
1
1. OpenCV 2.0 소개 및 설치 1
2
목 차 영상처리 OpenCV 소개 OpenCV 2.0 설치 코드 규칙 기본 데이터 타입 행렬과 영상 타입
목 차 영상처리 OpenCV 소개 OpenCV 2.0 설치 코드 규칙 기본 데이터 타입 행렬과 영상 타입 CvMat 행렬 구조체 IplImage 구조체
3
What is OpenCV? OpenCV 목표 의미: Open Source Computer Vision Library
500여개 이상의 함수와 알고리즘들: Computer vision Image processing (영상처리) 이외 일반적인 목적의 함수들 효율적이며 가볍다 (C/C++) Absolutely free! 목표 기본적인 비전 기반 구조를 위한 소스 코드 공개를 통하여 비전 연구의 발전 비전 응용프로그램 개발을 위한 공통 기반 구조를 제공하여 비전 지식을 보급 이식성이 좋고, 성능이 최적화된 소스 코드를 공개하여 비전 기반 상업용 응용프로그램의 발전
4
Who did make this? 1999년부터 Intel 사가 개발
Available on Windows, Linux and MacOSX. 많은 회사들과 리서치 센터 등에서 폭넓게 사용 중 Home page:
5
OpenCV 주된 활용 분야 Computer Human Interaction (HCI) Object Identification
Segmentation and Recognition Face Recognition Gesture Recognition Motion Tracking Motion Understanding And so on.
6
프로그램 받는 곳 중요!: Version은 1.0을 사용합니다 Download 직접링크 (click)
중요!: Version은 1.0을 사용합니다 Download 직접링크 (click)
7
영상처리 이미지
8
OpenCV OpenCV 구조 CV : 기본적인 영상 처리와 고수준의 컴퓨터 비전 알고리즘
MLL : 다양한 통계 분류와 군집화 도구 등의 기계 학습 라이브러리 HighGUI : 입출력에 관련된 함수들과 영상과 비디오를 불러오고 저장 CXCORE : 기본적인 자료 구조와 알고리즘
9
OpenCV OpenCV 관련 사이트 공식 OpenCV 사이트 한국 커뮤니티 야후 커뮤니티 공식 레퍼런스 다운로드 OpenCV 2.0에 추가 기능
10
OpenCV 설치 OpenCV 2.0 다운 & 설치 CMake 다운 & 설치 CMake(cmake –gui) 실행
CMake 다운 & 설치 CMake(cmake –gui) 실행
11
OpenCV 설치 Cmake 설정 경로 설정 Source code 위치 빌드한 파일을 저장할 위치 Configure 버튼 클릭
빌드 설정 자신에게 맞는 compile 버전 선택 BUILD_EXAMPLES 체크 Generate 버튼 클릭
12
OpenCV 설치 프로젝트 빌드 프로젝트 열기 Release 모드로 변경 프로젝트 Build 결과 확인
13
OpenCV 설치 VC++ 디렉토리 설정 포함 파일(include file) 지정
라이브러리 파일(library file) 지정
14
OpenCV 설치 프로젝트 생성 및 설정 새 프로젝트 생성 Win32 콘솔 프로젝트 선택 빈 프로젝트 체크
프로젝트>속성 선택 추가 종석성 입력
15
OpenCV 설치 프로젝트 실행 dll 파일 복사 이미지 파일 복사 Source 파일 추가 Source 입력 실행
16
예제 프로그램 구조체 이미지에서 Pixel값으로의 접근 IpImage, CvScalar 이미지 불러오기 그리기 함수
이미지 영역 검출 (red 영역 검출)
17
구조체: 관련된 정보를 그룹화하여 표현 구조체 (structure) ?
하나의 물건(객체)가 여러 요소로 구성되어 있을때 효율적으로 표현하기 Example) 학생: 이름, 학번, 주소, 전화번호,… 성적: 국어점수, 수학점수, 영어점수, 총점, 평균 구조체: 관련된 정보를 그룹화하여 표현
18
구조체 (structure) 구조체: 관련된 정보를 그룹화하여 표현 구조체 이름 학생 이름 학번 주소 전화번호 멤버 변수
19
struct student { char name[30]; int number; float grade; }; 구조체의 정의
Example) struct student { char name[30]; int number; float grade; };
20
구조체변수이름.맴버변수이름 멤버로의 접근 struct score { int korean; int math; };
score a; a.korean = 30; a.math = 80;
21
픽셀(Pixel: Picture Element)
이미지:픽셀의 집합 비트맵(Bitmap)
22
픽셀 픽셀의 색: 적색(Red), 녹색(Green), 청색(Blue) 컬러의 수 픽셀 당 비트 수(밝기 레벨)
23
x y Pixel의 값 = (위치, 색) 위치 : 각 픽셀의 2D 좌표 (Image Coordinate System)
색 : CvScalar (색을 저장하는 구조체) x y (0,0) (8,2)
24
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;
25
IplImage 구조체 데이터 구조 CvMat를 상속하며 영상을 표현하기에 적합한 추가 항목들을 가지고 있음.
26
Image I/O (이미지 입출력) IplImage* cvLoadImage(image_path);
파일로 부터 이미지를 읽는다. 성공할 경우 메모리가 생성되고 IplImage pointer를 반환 실패할 경우 NULL 값을 리턴 cvSaveImage(image_path, IplImage *); 이미지를 파일로 저장한다. 형식은 확장자로 부터 결정 cvReleaseImage(IplImage **); 이미지를 저장하고 있던 메모리를 해제한다. BMP, JPEG, PNG, TIFF, PPM/PGM 포멧등이 지원됨
27
Image I/O (이미지 입출력) 이미지의 포멧을 바꾸어 저장하기 예:
IplImage* img = cvLoadImage(“picture.jpg”); if( img != NULL ) cvSaveImage( “picture.bmp”, img );
28
Windows cvNamedWindow(window_name);
윈도우를 생성한다. 윈도우는 이름을 부여할 수 있고, 각 이름을 기준으로 구분한다. cvNamedWindow(“ViewA”); cvMoveWindow(“ViewA”,300,100); cvDestroyWindow(“ViewA”); … cvShowImage(window_name, IplImage *); 주어진 이름에 해당하는 윈도우에 이미지를 보여준다. 한 이미지만을 보여 줄 수 있으며, 부분 적인 출력은 하지 못한다. cvDestroyWindow(window_name); 주어진 이름에 해당하는 윈도우를 없앤다.
29
색을 저장하는 변수: 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]; };
30
이미지에서 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를 정보를 참조할것)
31
예제 프로그램 이미지 불러오기 // 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" ); }
32
예제 프로그램 그리기 함수
33
예제 프로그램 이미지 영역 검출 (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);// 만족하는 경우 사각형을 그려주게 됨 . }
34
코드 규칙 접두사 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
35
코드 규칙 상수 규칙 : 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
36
기본 데이터 타입 CvPoint CvSize CvRect CvScalar
이미지에서의 x,y 좌표를 나타낼 때 CvSize width, hight를 이용하여 이미지의 크기를 표현 할 때 CvRect 이미지 내의 특정 사각형 공간을 정의 할 때 CvScalar RGBA 색상을 표현 하기 위해 사용 각 데이터 타입은 cvPoint(), cvSize(), cvRect(), cvScalar() 등의 인라인 생성자 함수를 이용하여 사용 가능
37
기본 데이터 타입 예제
38
행렬과 영상 타입 IplImage IplImage 구조 영상을 표현하는 데이터 타입
그레이영상, 컬러영상, 4채널 영상(RGB+알파)를 표현 가능 각 채널은 정수, 실수형 데이터를 저장 할 수 있음 IplImage 구조 객체 지향적 구조 구성 CvArr는 CvMat의 추상 기반 클래스, IpllImage는 CvMat를 상속 CvArr* 타입이 사용된 자리에는 CvMat* 또는 IplImage* 타입을 대체해서 사용 할 수 있음
39
CvMat 행렬 구조체 구조체 정의
40
CvMat 행렬 데이터 접근 간편한 방법 1차원 또는 2차원 행렬을 다룰 때 사용 매번 호출할 때마다 주소값 계산을 반복
간편하지만 비효율적
41
CvMat 행렬 데이터 접근 엄격한 방법 다차원 배열도 지원 cvPtr* 은 포인터를 반환
cvGet* 실제 데이터를 반환 하지만 속도가 느림
42
CvMat 행렬 데이터 접근 엄격한 방법
43
CvMat 행렬 데이터 접근 적절한 방법 연속적인 데이터 접근에 효율적 정확한 오프셋은 행렬의 step 멤버값을 이용해서 구함
포인터 주소를 역참조 할 때, 원하는 타입에 해당하는 공용체 멤버를 선택
44
점들의 배열 메모리에서 점들의 구성
45
IplImage 구조체 데이터 구조 CvMat를 상속하며 영상을 표현하기에 적합한 추가 항목들을 가지고 있음.
46
IplImage 구조체 데이터 접근 CvMat과 유사
47
ROI ROI 자신이 원하는 특정 영역만 작업을 수행 하고자 할 경우
48
ROI WidthStep을 이용한 관심영역 프로세싱 한 이미지에서 여러 개의 관심 영역을 설정 할 수 있음
Similar presentations