본문 바로가기
Computer Vision

OpenCV 주요 클래스 - 2. Mat 클래스(1)

by ksb0511 2020. 2. 9.

1. 개요

  • OpenCV 라이브러리에서 가장 많이 사용하는 클래스
  • 일반적인 2차원 행렬뿐 아니라 고차원 행렬 표현 가능, 한 개 이상의 채널을 가질 수 있음.
  • 정수, 실수 등으로 구성된 행렬 또는 벡터, 그레이스케일, 컬러 영상, 경우에 따라 벡터 필드, 포인트 클라우드, 텐서 등 정보 저장 가능
  • Mat 클래스의 멤버 변수
    • Mat::dims : Mat 행렬의 차원을 의미, ex) 영상처럼 2차원 행렬일 경우 값은 2
    • Mat::rows : 행렬의 행 개수 - 2차원 행렬일 경우에만 의미있고 3차원 이상일 경우 -1로 저장
    • Mat::cols : 행렬의 열 개수 - 2차원 행렬일 경우에만 의미있고 3차원 이상일 경우 -1로 저장
    • Mat::size : 3차원 이상의 행렬의 크기 정보 참조
    • Mat::data : 행렬의 원소 데이터가 저장되어 있는 메모리 공간을 가리키는 포인터형 멤버 변수
      • 행렬에 아무것도 저장되어 있지 않다면 Mat::data는 0값
      • Mat 클래스의 모든 멤버 변수는 public 접근 지시자로 선언, 외부에서 직접 접근 가능.

CV_<bit-depth>{U|S|F}

  • Mat 행렬의 깊이(매크로 상수로 표현)
    • <bit-depth>에는 8, 16, 32, 64의 숫자를 지정, 이는 원소 값 하나의 비트 수를 의미
    • {U|S|F}에서 U는 부호 없는 정수형, S는 부호 있는 정수형, F는 부동 소수형을 의미
  • Mat 행렬 원소는 하나의 값을 가질 수도 있고, 여러 개로 구성된 값을 가질 수도 있음.
  • Mat 행렬 원소를 구성하는 각각의 값을 채널이라 함.
  • 하나의 행렬을 구성하는 각 채널은 모두 같은 자료형을 사용해야 함.

CV_<bit-depth>{U|S|F}C(<number_of_channels>)

  • Mat 객체의 타입 : Mat 행렬의 깊이 정보와 채널 수 정보를 합친 것.
  • ex) CV_8UC1 -> unsigned char 자료형을 사용하고 채널이 한 개인 행렬 or 영상

댓글