Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

:)

OpenCV 주요 클래스 본문

컴퓨터비전

OpenCV 주요 클래스

mihee 2022. 3. 16. 13:57

Point_ 클래스

  • 2차원 점의 좌표 표현을 위한 템플릿 클래스
  • 멤버 변수 : x,y
  • 멤버 함수 : dot()(내적), ddot()(double dot), cross()(외적), inside()(어떠한 점이 사각형에 존재하는지) 등
  • 다양한 사칙 연산에 대한 연산자 오버로딩과 << 연산자 오버로딩을 지원
typedef Point_<int>        Point2i;
typedef Point_<int64>    Point2l;
typedef Point_<float>    Point2f;
typedef Point_<double>    Point2d;
typedef Point2i            Point;

Size_ 클래스

  • 영상 또는 사각형의 크기 표현을 위한 템플릿 클래스
  • 멤버 변수 : width, height
  • 멤버 함수 : area()
  • 사칙연산, 출력을 위한 << 연산자 오버로딩을 지원
typedef Size2i    Size;

Rect_ 클래스

  • 2차원 사각형 표현을 위한 템플릿 클래스
  • 멤버 변수 : x, y, width, height
  • 멤버 함수 : tl() (top left), br() (bottom right), size(), area(), contains() (어떠한 점이 사각형에 포함되어있는지)
  • 사칙연산, 출력을 위한 << 연산자 오버로딩을 지원
typedef Rect2i    Rect;

Range 클래스

  • 정수 값의 범위를 나타내기 위한 클래스
  • 멤버 변수 : start, end
  • 멤버 함수 : size(), empty(), all()
  • start는 범위에 포함되고, end는 범위에 포함되지 않음 [start, end)

Scalar 클래스

  • 크기가 4인 double 배열을 멤버 변수로 가지고 있는 클래스
  • 4채널 이하의 영상에서 픽셀 값을 표현하는 용도로 자주 사용
  • []연산자를 통해 원소에 접근 가능
typedef Scalar_<double>        Scalar;  -> 4개의 double형 데이터를 가지는 자료형(val[0],val[1],val[2],val[3]);

Mat 클래스

  • Mat 클래스의 깊이(depth)
    • 행렬 원소가 사용하는 자료형 정보를 가리키는 매크로 상수
    • Mat::depth() 함수를 이용하여 참조
    • 형식 : CV_{U|S|F}
  • Mat 클래스의 채널(channel)
    • 원소 하나가 몇 개의 값으로 구성되어 있는가
    • channels() 함수를 이용하여 참조
    • ex) 그레이스케일 영상은 픽셀 하나 당 밝기 값 1개, 트루컬러 영상은 픽셀 하나 당 B G R 색상 성분 3개
  • Mat 클래스의 타입(type)
    • 행렬의 깊이와 채널 수를 한꺼번에 나타내는 매크로 상수
    • type() 함수를 이용하여 참조
    • ex) CV_8UC1 -> (8:비트수 U:정수형의 부호(s/u) or 실수형(F) 1:채널수)

Mat 클래스 객체의 참조와 복사

  • Mat 객체에 대해 = 연산자는 참조(얕은 복사)를 수행 (같은 메모리 공간을 가짐)
  • Mat::clone() 또는 Mat::copyTo() 함수를 이용하여 깊은 복사를 수행 (분리된 메모리 공간)

Mat 영상의 픽셀 값 접근하기

  • OpenCV에서 제공하는 기능이 아니라 자신만의 새로운 기능을 추가해야 하는 경우에 유용

  • Mat::at() : 좌표 지정이 직관적. 임의의 좌표에 접근할 수 있음

    • at(y,x)
  • Mat::ptr() : at() 보다 빠르게 동작. 행 단위 연산을 수행할 때 유리

    • ptr(y)

      for (int y=0; y < mat.rows; y++) {
        uchar* p = mat1.ptr<uchar>(y);
      
        for (int x=0; x < mat1.cols; x++) {
          p[x]++;
      }
      }
  • Matlterator_ 반복자 : 좌표를 지정하지 않아서 안전. 성능은 느린 편

    for ( MatIterator_<uchar> it = mat1.begin<uchar>();
        it != mat1.end<uchar>(); ++it) {
        (*it)++;
    }
Comments