본문 바로가기
컴퓨터 비전

OpenCV 주요 클래스

by 태풍사랑 2020. 2. 12.

1. 기본 자료형 클래스

①Point_ 클래스

  • 2차원 평면 위에 있는 점의 좌표를 표현하는 템플릿 클래스
  • x, y의 두 멤버 변수
  • 2차원 정수 좌표계에서 좌표를 표현하는 자료형
Point pt1; //pt1=(0,0)
pt1.x = 5; pt1.y = 10; //pt1=(5,10)
Point pt2(10,30); //pt2 = (10,30)
Point pt3 = pt1 + pt2; //pt3=(15,40)
Point pt4 = pt1 + 2; //pt4=(10,20)
int d1 = pt1.dot(pt2); //d1=350
bool b1 = (pt1 == pt2) //b1=false

 

②Size_ 클래스

  • 영상 또는 사각형 영역의 크기 표현
  • width, height의 두 정수형 멤버 변수
Size sz1, sz2(10,20); //sz1 = 0*0, sz2 = 10*20
sz1.width = 5; sz1.height = 10; //sz1 = 5*10
Size sz3 = sz1 + sz2; //sz3 = 15*30

 

③Rect_ 클래스

  • 사각형의 위치와 크기 정보를 표현
  • 사각형의 좌측 상단 점의 좌표(x, y), 사각형의 가로 및 세로 크기(width, height) 정수형 멤버 변수
Rect rc1; //rc1 = (0,0)좌표부터 크기가 0*0
Rect rc2(10,10,60,40) //rc2 = (10,10) 좌표부터 크기가 60*40
Rect rc3 = rc1 + Size(50,40); //rc3 = (0,0)좌표부터 크기가 50*40
Rect rc4 = rc2 + Point(10,10); //rc4 = rc2 사각형의 위치가 (10,10)만큼 이동, 따라서 (20,20)좌표부터 크기가 60*40
Rect rc5 = rc3 & rc4; // &연산 = 두 사각형이 교차하는 사각형 영역 반환
Rect rc6 = rc3 | rc4; // |연산 = 두 사각형을 모두 포함하는 최소 크기의 사각형 반환

 

④RotatedRect 클래스

  • center(회전된 사각형의 중심 좌표), size(사각형의 가로 및 세로 크기), angle(회전 각도 정보)의 멤버 변수
  • 앞의 클래스와 달리 템플릿 클래스x
  • 모든 정보를 float 자료형을 사용하여 표현
RotatedRect rr1(Point2f(40,30), Size2f(40,20), 30.f); //중심좌표(40,30), 크기 40*20, 시계방향으로 30도 회전된 사각형
  • RotatedRect::points() = 회전된 사각형 객체의 네 꼭짓점 좌표를 알고 싶을 때 사용하는 함수
Point2f pts[4];
rr1.points(pts); //사각형의 좌측 하단 꼭지점부터 시계 방향으로 꼭지점 좌표 추출
  • RotatedRect::boundingRect() = 특정 객체를 감싸는 최소 크기의 사각형의 바운딩 박스를 구하는 함수
Rect br = rr1.boundingRect();
Rect br = rr1.boundingRect2f(); //바운딩 박스 사각형의 좌표를 실수 단위로 얻고 싶을때 사용

 

⑤Range 클래스

  • 범위 또는 구간을 표현하는 클래스
  • start(범위의 시작), end(범위의 끝) 두 멤버 변수
  • start는 범위에 포함 o, end는 범위에 포함 x

⑥String 클래스

  • 문자열을 저장하고 처리

2.Mat 클래스

  • 행렬(matrix)을 표현하는 클래스
  • 다양한 자료형의 원소를 가질 수 있음
  • 채널(channel) =  행렬 원소를 구성하는 각각의 값, 채널은 모두 같은 자료형을 사용해야 함
  • 타입(type) = Mat 행렬의 깊이 정보와 채널 수 정보를 합친 것

① 행렬의 생성 & 초기화

Mat(int rows, int cols, int type); //영상의 세로크기, 가로크기, 행렬의 타입
Mat(Size size, int type) //행렬의 크기(Size(cols,rows) 또는 Size(width, height), 행렬의 타입
Mat(int rows, int cols, int type, const Scalar& s); //s = 행렬 원소 초깃값(Scalar = 네 개의 실수 값을 저장할 수 있는 클래스)
Mat::zeros(int rows, int cols, int type); // 모든 원소가 0으로 초기화된 행렬을 만드는 함수
Mat::ones(int rows, int cols, int type); // 모든 원소가 1으로 초기화된 행렬을 만드는 함수
Mat::eye(int rows, int cols, int type); // 단위 행렬을 만드는 함수

 

② 행렬 복사

//픽셀 데이터 공유x, 메모리 공간을 새로 할당하여 픽셀 데이터 전체 복사
Mat::clone() const; //반환값 = this행렬의 복사본
Mat::copyTo(OutputArray m) const; //m = 복사본이 저장된 행렬, 호출행렬과 복사행렬의 크기 또는 타입이 다를 경우 

 

③ 부분 행렬 추출

  • 특정 사각형 영역의 부분 행렬을 추출하고 싶을 때 사용
  • 메모리 공간을 확보하여 복사 x, 픽셀 데이터를 공유하는 복사 => 부분 영상 추출 후 부분 영상의 픽셀 값을 변경하면 원본 영상의 픽셀 값도 함께 변경!
  • 사각형이 아닌 모양을 설정하고 싶을 경우 -> 마스크 연산 응용
  • 독립된 메모리 영역을 확보 후 부분 영상 추출 -> clone() 사용
Mat::operator()(const Rect& roi) const; //roi = 사각형 관심 영역
Mat::operator()(Range rowRange, Range colRange) const; //관심 행/열 범위

 

④ 행렬의 원소 값 참조

 1) Mat::at() 함수

  • 행과 열을 나타내는 두 개의 정수를 인자로 받아 -> 해당 위치의 행렬 원소 값을 참조 형식으로 반환
  • 임의 좌표 원소에 빈번하게 접근하는 경우 유용
template<typename _Tp> _Tp& Mat::at(int y, int x) // y=행 번호, x=열 번호, 반환값=_Tp&으로 형변환된 y번째 행, x번째 열의 원소 값

 

 2) Mat::ptr() 함수

  • 특정 행의 첫 번째 원소 주소 반환
  • 행 단위로 행렬 원소를 참조하는 경우 유용
  • Mat::at() 함수보다 빠르게 동작
template<typename _Tp>
_Tp* Mat::ptr(int y) //y = 참조할 행 번호, 반환값 = _Tp*형으로 변환된 y번째 행의 시작 주소

 

3) Matlterator_ 반복자

  • 앞 Mat::at()함수와, Mat::ptr() 함수의 경우 행렬의 크기를 벗어나면 에러 발생 -> 이를 해결하기 위해 반복자 개념을 도입해 행렬 원소를 참조할 수 있는 방법
  • 행렬 크기에 상관없이 행렬 전체 원소를 차례대로 참조
  • Mat::begin() = 행렬의 첫 번째 원소의 위치를 get, Mat::end() = 마지막 원소 바로 다음 위치 get
  • 동작 속도에서 Mat::ptr()함수보다 느리고, Mat::at() 함수처럼 임의의 위치에 자유롭게 접근할 수 없음

3.Vec 클래스 & Scalar 클래스

①Vec 클래스

  • 행 벡터 + 열 벡터 = 벡터 or 벡터 행렬
  • 벡터 = 같은 자료형을 가진 원소 몇개로 구성된 데이터 형식
  • 채널 제한이 없음

②Scalar 클래스

  • 4채널 이하의 영상에서 픽셀 값을 표현하는 용도

4.InputArray & OutputArray 클래스

①InputArray 클래스

Mat _InputArray::getMat(int idx=-1) const; //idx = 참조할 행 번호(<0일 경우 행렬 전체 참조), 반환값 = Mat 행렬 객체

②OutputArray 클래스

 

'컴퓨터 비전' 카테고리의 다른 글

영상의 산술 및 논리 연산  (0) 2020.02.25
OpenCV 주요 기능  (0) 2020.02.14
openCV를 사용한 영상의 밝기와 명암비 조절  (1) 2020.02.09

댓글