Search
Duplicate

OpenCV로 배우는 영상 처리 및 응용/ OpenCV의 기본 자료 구조

기본 템플릿 클래스

Point

멤버

Search
타입
이름
내용
T
y
Y 값
Open

함수

Search
타입
이름
내용
dot()
내적
double
Open
corss()
외적
bool
Open
inside()
Point가 Rect 안에 있는지 여부

Point3

멤버

Search
타입
이름
내용
T
X 값
T
Y 값
T
Z 값

함수

Search
타입
이름
내용
T
dot()
Open
내적
double
corss()
Open
외적

Size

멤버

Search
타입
이름
내용
T
width
Open
Width 값
T
height
Open
Height 값

함수

Search
타입
이름
내용
T
area()
Open
내부 영역의 넓이 (Width x Height)

Rect

멤버

Search
타입
이름
내용
T
X 값
T
Y 값
T
width
Open
Width 값
T
height
Open
Height 값

함수

Search
타입
이름
내용
Point
Open
tl()
좌상된 좌표 반환
Point
Open
br()
우하단 좌표 반환
Size
Open
size()
사각형의 크기를 Size 형으로 반환
area()
내부 영역의 넓이 (Width x Height)
bool
Open
contains()
사각형 내부에 좌표가 있는지 확인

Vec

Template 클래스
[ ]를 이용하여 원소들에 접근할 수 있다.
mul

함수

Search
타입
이름
내용
T
mul()
Open
벡터의 element-wise 곱을 계산한다.

Scalar

Vec<Tp, 4>에서 파생된 템플릿 클래스로서 4개의 원소를 갖는다.
OpenCV에서 특별히 화소의 값을 지정하기 위한 자료형으로 정의되었으며 RGBA 4개의 값을 저장한다.

RotatedRect

회전된 사각형을 나타내기 위한 클래스

멤버

Search
타입
이름
내용
Point2f
Open
center
중심점
Size2f
Open
size
크기
float
Open
angle
회전된 각도

함수

Search
타입
이름
내용
Rect
Open
boundingRect()
회전사각형 4개 모서리를 모두 포함하는 최소 크기의 사각형 영역을 반환
void
Open
points()
인수로 입력되는 pts 배열에 회전사각형의 4개 꼭짓점을 전달

Mat 클래스

행렬 자료형의 종류

Search
데이터형
설명
Depth 값
CV_8U
Open
uchar
0
CV_8S
Open
signed char
1
CV_16U
Open
unsigned short int
2
CV_16S
Open
signed short int
3
CV_32S
Open
int
4
CV_32F
Open
float
5
CV_64F
Open
double
6

행렬 초기화 함수

Search
타입
이름
내용
MatExpr
ones()
Open
행렬의 모든 원소 1인 행렬을 반환
MatExpr
eye()
Open
지정된 크기와 타입의 단위 행렬을 반환
MatExpr
zeros()
Open
행렬의 모든 원소를 0으로 초기화

멤버

Search
타입
이름
내용
int
Open
dims
차원 수
int
Open
rows
행 갯수
int
Open
cols
열 개수
uchar*
Open
data
행렬 원소 데이터에 대한 포인터
MatStep
Open
step
행렬의 한 행이 차지하는 바이트 수
MatSize
Open
size
행렬의 크기를 Size 형으로 반환

함수

Search
타입
이름
내용
int
Open
channels()
행렬의 채널 수 반환
int
Open
depth()
행렬의 깊이 값 반환
Size
Open
elemSize()
행렬의 한 원소에 대한 바이트 크기 반환
Size
Open
elemSize1()
행렬의 한 원소의 한 채널에 대한 바이트 크기 반환
bool
Open
empty()
행렬 원소가 비어있는지 여부 반환
bool
Open
isSubmatrix()
참조 행렬인지 여부 반환
size
Open
step1()
Step을 elemSize1()로 나누어서 정규화된 step 반환
size
Open
total()
행렬 원소의 전체 개수 반환
int
Open
type()
행렬의 데이터 타입(자료형 + 채널 수) 반환 자료형으로 상위 3비트 + 채널 수로 하위 3비트
void
Open
resize()
행의 개수를 기준으로 기존 행렬의 크기를 변경한다. 기존 행렬의 행의 개수보다 sz가 작으면 하단 행을 제거하고, 크면 기존 행렬 하단에 행을 추가한다.
Mat
Open
reshape()
행렬의 전체 원소 개수는 바뀌지 않으면서 행렬의 모양을 변경하여 새 행렬을 반환한다. 기존 행렬과 변경된 행렬의 전체 원소 개수(채널 수 x 행수 x 열수)가 일치하지 않으면 에러가 발생한다.
void
Open
create()
기존에 존재하는 행렬의 차원, 행, 열, 자료형을 변경하여 다시 생성한다. 기존 행렬과 크기와 자료형이 다르면 기존 메모리를 해제하고 새로운 데이터를 생성한다.
Mat
Open
clone()
행렬 데이터와 같은 값을 복사해서 새로운 행렬을 반환한다.
void
Open
copyTo()
행렬 데이터를 인자로 입력된 mat 행렬에 복사한다.
void
Open
convertTo()
행렬 원소의 데이터 타입을 변경하여 인수로 입력된 mat 행렬에 반환한다.
void
Open
push_back()
행렬의 마지막(bottom)에 원소들을 추가한다.
void
Open
pop_back()
행렬의 마지막(bottom)에서 원소들을 제거한다.
Mat
Open
cross()
두 개의 3-원소 벡터들의 외적(cross-product)을 계산한다.
Double
Open
dot()
두 벡터의 내적(dot-product)을 계산한다. 1행(1열) 벡터가 아니면 1차원 벡터로 간주하고 내적을 계산한다. 1차원 벡터의 구성은 위에서 아래로, 왼쪽에서 오른쪽의 순서로 스캔한다. 행렬이 1채널 이상이면, 각 채널들의 내적을 구하여 합산한다.
MatExpr
Open
inv()
역행렬을 계산한다.
MatExpr
Open
mul()
두 행렬의 각 원소 간(element-wise) 곱셈을 수행하여 반환한다.
MatExpr
Open
t()
해당 행렬의 전치를 수행한다. 여기서 t()는 실제로 전치를 수행하는 것이 아니라 임시로 전치된 행렬의 헤더를 반환한다. 반환된 헤더는 복잡한 행렬 연산에 사용하거나 새 행렬에 할당할 수 있다.

연산자

Search
오른쪽 항의 데이터 타입
예문
내용
스칼라값
Open
m1 = 100
행렬의 모든 원소를 지정된 스칼라값으로 변경하고자 할 때 사용한다. 마스크 행렬이 없는 MatsetTo()와 같은 역할을 한다.
행렬 수식
Open
m1 = m2 + m3m1 = m3 -7
수식의 결과가 m1 행렬에 복사된다.
행렬
Open
m1 = m2
m2 행렬이 m1 행렬에 복사되는 것이 아니라 m2 행렬을 m1 행렬이 공유한다. 따라서 m2 행렬의 원소가 변경되면, m1 행렬의 원소도 변경된다.

Range 클래스

Range 클래스는 하나의 시퀀스에서 연속되는 서브 시퀀스를 지정하는 클래스이다. 주로 Mat 클래스에서 행 또는 열의 범위를 지정할 때 사용된다.
멤버 변수로 start, end가 존재하는데, start는 주어진 범위 안에 포함되며, end는 포함되지 않는다.

함수

Search
타입
이름
내용
int
Open
size()
서브 시퀀스의 크기를 반환한다.
bool
Open
empty()
서브 시퀀스가 비어있는지를 확인한다.
Range
Open
all()
서브 시퀀스가 가득차 있는지 반환한다.

행렬 헤더 관련 함수

Search
타입
이름
내용
Mat
row()
Open
기존 행렬에서 지정된 행을 위한 행렬 헤더를 생성하여 반환한다.
Mat
col()
Open
기존 행렬에서 지정된 열을 위한 행렬 헤더를 생성하여 반환한다.
Mat
rowRange()
Open
기존 행렬에서 지정된 연속된 행을 위한 행렬 헤더를 생성하여 반환한다. 연속되는 행을 공유하고자 할 때 사용된다.
Mat
colRange()
Open
기존 행렬에서 지정된 연속된 열을 위한 행렬 헤더를 생성하여 반환한다. 연속되는 열을 공유하고자 할 때 사용된다.
void
locateROI()
Open
부분 행렬에서 부모 행렬의 크기와 위치를 알려준다.
void
adjustROI()
Open
부분 행렬에서 관심영역의 크기와 위치를 조정한다.
Mat
operator()
Open
사각형의 부분 행렬을 추출한다.

행렬의 메모리 해제

Mat::release() 함수는 행렬 데이터와 관련된 참조 카운터를 감소시킨다. 그리고 참조 카운터가 0에 도달하면, 행렬 데이터를 해제하고, 행렬 데이터와 참조 카운터의 포인터는 모두 null 값으로 설정함으로써 메모리를 해제한다.
이 함수는 행렬 데이터의 해제를 위해서 명시적으로 호출할 수 있지만, Mat 클래스의 파괴자(destructor)에 의해 자동으로 호출되기 때문에 일반적으로 필요하지 않다.

예외처리

영상 처리를 위해서 입력받는 영상 데이터는 기본적으로 채널당 8비트로 인코딩된 데이터이다. 8비트만을 이용하기 때문에 화소의 값에서 제한된 범위를 가진다.
영상 데이터에 특정 연산을 할 경우 –컬러 공간 변환, 밝기/대조 조정, 샤프닝, 보간법 등– 대부분 산술연산 등으로 인해 음수나 소수점 이하의 값, 혹은 8비트의 범위를 벗어나는 값들을 갖게 할 것이다.
이때 8비트만을 결과 값으로 사용하면 결과 영상에 오류가 발생될 수 있고 다음 단계의 영상 분석이나 처리에 영향을 줄 수 있다.
이 문제를 해결하기 위해 포화 산술(saturation arithmetics) 연산이 사용된다. 이것은 8비트 범위일 때 다음과 같은 수식으로 나타낼 수 있다.
I(x, y) = min(max(round(r), 0), 255)
즉, 어떤 연산의 결과 값(r)을 8비트로 저장한다고 할 때 비트 제한 범위를 넘으면 0 또는 255 가운데 가까운 값으로 저장한다.
OpenCV에서는 행렬에 대해 연산을 할 경우 기본적으로 포화 산술이 적용된다. 또한 기본 자료형에 대해 포화 산술 연산이 가능하도록 saturate_cast() 템플릿 메서드를 구현해 두었다.

예외처리 매크로

Search
타입
이름
내용
define
CV_Assert()
Open
실행시간에 조건을 체크하는 매크로. 조건이 false가 되면 예외 발생
define
CV_Error()
Open
에러 코드 발생시 msg 문자열 출력
define
CV_Error_()
Open
에러 코드 발생시 args로 포맷 매칭하여 문자열 출력