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

Java로 OpenCV Mat 객체를 선언하고 활용하는 방법

OpenCV에서 Mat 클래스는 이미지를 저장하는 데 사용되는 행렬(matrix) 객체를 나타냅니다. 이미지 파일을 불러오는 것 외에도, Mat 객체를 직접 선언하여 원하는 형태의 행렬을 만들 수 있습니다.

Mat 객체 선언 절차

  • OpenCV 네이티브 라이브러리 로드 — OpenCV 라이브러리를 사용해 Java 코드를 작성할 때 가장 먼저 해야 할 일은 loadLibrary() 메서드를 통해 OpenCV의 네이티브 라이브러리를 로드하는 것입니다.

  • Mat 클래스 인스턴스화 — 다양한 생성자 중 하나를 사용하여 Mat 클래스의 인스턴스를 생성합니다. 행렬의 크기, 데이터 타입, 초기값 등을 지정할 수 있습니다.

  • 메서드를 활용한 행렬 값 설정row() 또는 col() 메서드에 인덱스 값을 전달하면 행렬의 특정 행이나 열을 가져올 수 있습니다.

  • setTo() 메서드로 값 지정 — 가져온 행이나 열에 대해 setTo() 메서드의 여러 변형 중 하나를 사용하여 원하는 값을 설정할 수 있습니다.

예제 코드

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.CvType;
import org.opencv.core.Scalar;

public class CreatingMat {
    public static void main(String[] args) {
        // 핵심(core) 라이브러리 로드
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        
        // 5x5 크기의 행렬 생성 (초기값 0)
        Mat matrix = new Mat(5, 5, CvType.CV_8UC1, new Scalar(0));
        
        // 값 추가
        Mat row0 = matrix.row(0);
        row0.setTo(new Scalar(1));
        
        Mat col3 = matrix.col(3);
        col3.setTo(new Scalar(3));
        
        // 행렬 출력
        System.out.println("행렬 데이터:\n" + matrix.dump());
    }
}

실행 결과

행렬 데이터:
[
   1, 1, 1, 3, 1;
   0, 0, 0, 3, 0;
   0, 0, 0, 3, 0;
   0, 0, 0, 3, 0;
   0, 0, 0, 3, 0
]

코드 설명

위 예제에서는 CvType.CV_8UC1을 사용하여 8비트 부호 없는 정수형 단일 채널 행렬을 생성했습니다. 생성자의 마지막 인자인 new Scalar(0)은 모든 요소를 0으로 초기화합니다.

그다음 row(0)으로 첫 번째 행을 가져와 모든 값을 1로 설정하고, col(3)으로 네 번째 열(인덱스 3)을 가져와 모든 값을 3으로 설정합니다. 결과적으로 첫 번째 행은 모두 1이고, 네 번째 열은 모두 3인 행렬이 완성됩니다. 교차 지점인 (0, 3) 위치의 값은 나중에 설정된 3이 유지됩니다.

마지막으로 dump() 메서드를 사용하면 행렬의 전체 내용을 문자열 형태로 손쉽게 확인할 수 있어 디버깅 시 매우 유용합니다.