심드렁하게 저장

OpenCV 자료형 : Mat과 Mat_의 차이 본문

Image Processing & Computer Vision

OpenCV 자료형 : Mat과 Mat_의 차이

Ggoosae 2024. 12. 26. 10:23

OpenCV에서 Mat과 Mat_은 둘 다 이미지를 저장하고 처리하기 위한 행렬 데이터 타입이지만, 용도와 기능에서 몇 가지 차이가 있다.

1. Mat (cv::Mat) :

  • 일반적인 행렬클래스:
    • OpenCV에서 가장 널리 사용되는 행렬클래스
    • 다양한 데이터 타입과 다차원 배열을 지원하고 이미지, 비디오 프레인, 혹은 데이터를 표현할 때 주로 사용
  • 유연한 데이터 타입 지원:
    • 픽셀 값의데이터 타입(예:CV_8UC3, CV_32FC1 등)을 설정할수있으며, 일반적으로 OpenCV의 함수들과 함께 사용
  • 템플릿 클래스 X
    • Mat은 템플릿 클래스가 아니고 데이터 타입을 별도로 지정하는 방식
    • CV_8UC3은 8비트 3채널 행렬을의미
cv::Mat img = cv::imread("image.jpg", cv::IMREAD_COLOR); // 컬러 이미지를 읽음

 

2. Mat_ (cv::Mat_<T>) :

  • 템플릿 행렬 클래스:
    • Mat의 템플릿 버전으로, 특정 데이터 타입과 강하게 연관된 행렬 클래스
    • 템플릿 타입 T를 통해 데이터 타입을 명시적으로 지정
  • 명시적인 타입 지정:
    • 행렬 데이터에 대한 타입 정보를 명확히 표현
    • 예를 들어, cv::Mat_<float>은 float 타입의 행렬로 고정
  • 편리한 연산 
    • () 연산자를 사용하여 픽셀에 직접 접근할 수 있어 at<T>() 함수보다 코드가 간결해짐
cv::Mat_<float> mat(2, 2); // 2x2 float 행렬 생성
mat(0, 0) = 1.0f;
mat(0, 1) = 2.0f;
mat(1, 0) = 3.0f;
mat(1, 1) = 4.0f;

 

3. 사용 기준

  • Mat:
    • 다양한 데이터 타입과 이미지 처리가 필요할 때
    • OpenCV의 대부분의 함수와 함께 사용할 때
  • Mat_:
    • 특정 데이터 타입에 대해 명확히 지정하고 템플릿 기반 코드를 작성하고 싶을 때
    • 픽셀 접근을 간소화하려고 할 때

일반적으로 OpenCV에서는 Mat이 더 많이 사용되며, Mat_은 특정 상황에서만 선택적으로 사용된다.