1. Point_ 클래스
가로와 세로의 위치를 2차원 좌표로 나타내기 위한 템플릿 클래스이다.
메버 변수로 가로와 세로 위치를 나타내는 x, y가 있다.
또한 내적(dot), 외적(cross)을 구하는 메소드, 좌표가 입력된 사각형 범위 안에 있는지 확인하는 메소드 등이 있다.
Point 형과 상수값의 곱셈 및 나눗셈 연산은 가능하지만 Point형 간의 곱셈은 불가능하다.
3차원 표현을 위한 Point3_클래스도 있다.
2. Size_ 클래스
이미지나 사각형의 크기를 규정하는 템플릿 클래스이다. 이클래스는 width와 height의 멤버변수를 갖는다.
Size_클래스와 Point_클래스는 내부 멤버 변수의 구조가 동일하기 때문에 서로 형변환이 가능하다. 따라서 형변환을 통해서 Size_와 Point_ 객체간의 산술연산이 가능하다.
3. Rect_ 클래스
2차원의 사각형 정보를 나타내기 위한 템플릿 클래스이다. 멤버 변수로 시작 좌표(x, y)와 크기(width, height) 정보를 포함한다. 내부 메서드는 시작 좌표와 종료 좌표를 반환하는 함수와 사각형의 크기 및 영역 넓이를 반환하는 SIZE, AREA 함수 등이 있다.
Rect_ 객체간의 산술 연산과, 논리 연산 또한 가능하다.
rect = rect +- point 사각형에 대한 평행이동 (왼쪽 상단 좌표를 기준으로 움직인다)
rect = rect +- size 사각형 크기의 변경 (x좌표 기준으로 width 증가, y좌표 기준으로 height 증가)
rect = rect1 & rect2 사각형의 교차영역
rect = rect1 | rect2 두 사각형중 왼쪽 최상단 오른쪽 최하단 영역
4. Vec 클래스
원소 개수가 작은 숫자 벡터를 위한 템플릿 클래스이다. Vec<Tp, 2>, Vec<Tp, 3>, Vec<Tp, 4>는 각각 Point_, Point3_, Scalar_클래스로 형변환이 가능하다.
5. Scalar_ 클래스
Vec 클래스중에서 Vec<Tp, 4> 에서 파생된 템플릿 클래스로서 4개 원소를 가진다. OpenCV에서 특별히 화소의 값을 지정하기 위한 자료형으로 정의 되었으며, 파랑 초록 빨강 투명도의 4개의 값을 저장한다.
초기화 하지 않으면 0으로 설정된다.
6. RotatedRect 클래스
회전된 사각형을 나타내기 위한 클래스이다. 회전사각형은 중심점, 크기, 회전각도를 멤버 변수로 가진다.
크기는 회전 사각형 내부의 가로와 세로를 말하며, 회전 각도는 3시 방향이 0도이고 시계 방향으로 증가한다.
7. Mat 클래스 **매우매우 중요
Open CV 1.X버전에서는 Iplimage(어떤 단어의 줄임말일까?) 구조체를 이용하여 영상 데이터를 다뤘지만 c언어의 단점들을 가지고 있으며, 처리속도가 매우 느려 OpenCV 2.0부터는 C++ 인터페이스를 도입했으며, Mat 클래스를 사용해 영상 데이터를 표현한다. 템플릿 클래스를 사용하여 각각의 자료형의 표현도 쉽고, 화소에 대한 접근방법도 수월하다. 뿐만 아니라 포인터 변수에 대한 메모리 해제도 소멸자에게 처리해주기 때문에 메모리 관리에 대한 걱정이 없다.
Mat 클래스는 n-차원의 밀집형 배열클래스로 다음과 같은 다양한 데이터를 저장할 수 있다.
-단일 채널 혹은 다중 채널의 값
-실수나 복소수로 구성된 벡터
- 명암도(gray-scale)영상이나 컬러 영상 데이터
-점의 집합
-히스토그램 데이터
Mat를 초기화 하는 생성자는 여러가지가 있으며 인수들로는
int rows, int cols 행렬의 행수와 열수
int type 행렬 원소의 자료형
Scalar& s 행렬의 모든 원소 값
size_t step 행렬의 한 행의 데이터가 차지하는 바이트 수
void* data 초기화할 행렬 원소 데이터에 대한 포인터
Size size 행렬의 크기를 Size 객체로 지정
Rect& roi 관심영역 사각형
Mat& m 미리 생성된 행렬 (기존 Mat 객체로 새 Mat 개체 생성 가능)
int ndims 행렬의 차원수(일반적으로 2차원 데이터를 다룸)
가령 uchar 행렬은 0~ 255까지 범위를 갖기 때문에 300으로 초기화 하여도 255값이 저장된다.
size는 가로 세로, Mat은 행렬이기 때문에 서로 반대이다 헷갈릴수 있다 **
Mat 행렬 초기화 함수
ones() 행렬의 모든 원소 1인 행렬을 반환한다. (1로 모든값을 초기화)
eyes() 지정된 크기와 타입의 단위 행렬을 반환한다. x y가 같을때 1
zeros() 행렬의 원소를 0으로 초기화 한다.
Mat m = new Mat(3, 4, 100); 3행 4열 행렬 선언 이후 100으로 원소 초기화
new Mat(3, 4, CV_8UC1) => 3 rows, 4cols, CV_8U depth, C1 channls , depth+ channels => type
집가서 계속
'미분류' 카테고리의 다른 글
OpevCV HSV 색공간에 대해 알아보자 (0) | 2017.08.04 |
---|---|
OpenCV YCbCr 색공간에 대해 알아보자 (0) | 2017.08.04 |
유사 연산자 엣지 검출 (0) | 2017.07.08 |
OpenCV를 활용한 이미지 유사도 비교 방법 (Feature Matching) (12) | 2017.07.06 |
목차 0 영상의 정의는 무엇이며 영상처리는 무엇인가 - (0) | 2017.07.04 |