더북(TheBook)

3.2.3 행렬의 복사

이 절에서는 Mat 클래스 타입의 변수에 저장된 행렬 객체를 다른 행렬 객체에 대입하거나 복사하는 방법에 대해 알아보겠습니다. 먼저 강아지 사진이 담겨 있는 dog.bmp 파일을 불러와서 Mat 타입의 변수 img1에 저장하고, 이를 이용하여 다양한 예제 코드를 만들어 보겠습니다.

Mat img1 = imread("dog.bmp");

Mat 클래스 객체에 저장된 영상 또는 행렬을 복사하는 가장 간단한 방법은 복사 생성자 또는 대입 연산자를 사용하는 방법입니다. 먼저 Mat 클래스 복사 생성자를 이용하여 영상을 복사하는 예제 코드를 살펴보겠습니다. img1 변수에 저장된 강아지 영상을 복사하여 img2 영상을 생성하려면 다음과 같이 코드를 작성합니다.

Mat img2 = img1;    // 복사 생성자(얕은 복사)

이 코드는 img1과 같은 크기, 같은 타입의 새로운 Mat 객체 img2를 생성하고 img1의 픽셀 데이터를 img2가 참조하도록 설정합니다. 즉, img1img2는 하나의 영상을 공유하는 서로 다른 이름의 변수 형태로 동작합니다. 이처럼 Mat 클래스의 복사 생성자는 행렬의 원소 데이터를 공유하는 얕은 복사(shallow copy)를 수행합니다.

Mat 클래스의 대입 연산자도 복사 생성자와 마찬가지로 얕은 복사를 수행합니다. 대입 연산자를 이용하여 img1 영상을 새로운 변수 img3에 복사하려면 다음과 같이 코드를 작성합니다.

Mat img3;
img3 = img1;        // 대입 연산자(얕은 복사)
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.