Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java OpenCV Mat 클래스 완벽 정리: 이미지 데이터의 핵심

OpenCV의 Mat 클래스란?

OpenCV에서 이미지는 Mat 객체에 저장됩니다. Mat은 n차원 배열(n-dimensional array)로, 그레이스케일 또는 컬러 이미지뿐만 아니라 복셀 볼륨(voxel volumes), 벡터 필드(vector fields), 포인트 클라우드(point clouds), 텐서(tensors), 히스토그램(histograms) 등 다양한 형태의 데이터를 저장하는 데 활용됩니다.

즉, OpenCV에서 모든 이미지 처리 작업의 출발점은 Mat 객체라고 할 수 있습니다.

이미지를 Mat 객체로 읽어들이기

OpenCV 라이브러리를 사용해 이미지를 읽으면 결과는 자동으로 Mat 객체에 담깁니다.

Mat matrix = Imgcodecs.imread(filePath);

위 코드처럼 Imgcodecs.imread() 메서드에 파일 경로를 전달하면, 해당 이미지가 Mat 객체로 변환되어 반환됩니다.

Mat 클래스의 주요 생성자

Mat 객체는 아래 생성자 중 하나를 사용해 직접 인스턴스화할 수도 있습니다.

  • Mat() — 인수가 없는 기본 생성자입니다. 빈 행렬(empty matrix)을 생성한 뒤, 다른 OpenCV 메서드에 전달할 때 사용됩니다.

  • Mat(int rows, int cols, int type) — 2차원 배열의 행(row) 수, 열(column) 수, 그리고 데이터 저장에 사용할 배열의 타입을 나타내는 세 개의 정수형 매개변수를 받습니다.

  • Mat(int rows, int cols, int type, Scalar s) — 앞선 생성자의 매개변수에 더해, 초기값을 지정할 수 있는 Scalar 객체를 추가로 받습니다.

  • Mat(Size size, int type) — 행렬의 크기를 나타내는 Size 객체와 배열 타입을 나타내는 정수, 두 개의 매개변수를 받습니다.

  • Mat(Size size, int type, Scalar s) — 앞선 생성자의 매개변수에 더해, Scalar 객체를 추가로 받습니다.

참고로 타입(type) 매개변수에는 CvType.CV_8UC1(그레이스케일), CvType.CV_8UC3(컬러) 같은 상수를 사용하며, 이는 픽셀당 비트 깊이와 채널 수를 결정합니다.

Mat 클래스의 주요 메서드

Mat 클래스에서 자주 사용되는 대표적인 메서드는 다음과 같습니다.

  • Mat col(int x) — 열 인덱스를 나타내는 정수를 매개변수로 받아, 해당 열(column)을 추출하여 반환합니다.

  • Mat row(int y) — 행 인덱스를 나타내는 정수를 매개변수로 받아, 해당 행(row)을 추출하여 반환합니다.

  • int cols() — 행렬의 열 개수를 반환합니다.

  • int rows() — 행렬의 행 개수를 반환합니다.

  • Mat setTo(Mat value)Mat 타입의 객체를 매개변수로 받아, 배열의 모든 요소를 지정한 값으로 설정합니다.

  • Mat setTo(Scalar s)Scalar 타입의 객체를 매개변수로 받아, 배열의 모든 요소를 지정한 값으로 설정합니다.

간단한 활용 예제

아래는 Mat 객체를 직접 생성하고 값을 설정하는 간단한 예시입니다.

// 3x3 크기의 빈 행렬 생성
Mat matrix = new Mat(3, 3, CvType.CV_8UC1);

// 모든 요소를 특정 값으로 초기화
matrix.setTo(new Scalar(255));

// 행렬 정보 확인
System.out.println("행 개수: " + matrix.rows());
System.out.println("열 개수: " + matrix.cols());

이처럼 Mat 클래스는 OpenCV에서 이미지와 다차원 데이터를 다루는 가장 기본적인 단위이므로, 생성자와 주요 메서드의 동작 방식을 정확히 이해해 두는 것이 중요합니다.