더북(TheBook)

앞에 나열된 연산자 재정의 함수 인자로 사용된 s에는 Scalar 객체뿐만 아니라 uchar, int, float, double 같은 C/C++ 기본 자료형을 전달할 수 있습니다. 연산자 재정의 함수의 반환형으로 사용된 MatExpr 타입은 OpenCV에서 행렬 연산을 표현하는 용도로 사용되는 행렬 표현식 클래스입니다. MatExpr 클래스는 Mat 객체와 Scalar 객체, 그리고 int, float, double 같은 C/C++ 기본 자료형으로 구성된 행렬 연산을 표현하며, 복사 생성자 또는 대입 연산자에 의해 Mat 객체로 변환될 수 있습니다. 그러므로 앞에 나열된 연산자 재정의 함수의 실행 결과는 모두 Mat 타입의 변수에 저장할 수 있습니다.

이러한 연산자 재정의 함수를 이용하여 수행할 수 있는 행렬의 사칙 연산 예제 코드와 그 의미를 표 3-3에 정리하였습니다. 표 3-3에서 mat1, mat2, mat3Mat 클래스 타입의 변수이고, s1Scalar 타입의 변수, d1double 자료형 변수를 나타냅니다. 참고로 s1 대신에 uchar, int, float, double 같은 기본 자료형을 사용할 수 있으며, d1 위치에도 uchar, int, float 같은 자료형을 사용할 수 있습니다. 다만 d1 위치에는 Scalar 객체를 지정할 수 없습니다.

▼ 표 3-3 Mat 클래스 행렬 연산 예제 코드와 의미

행렬의 사칙 연산 예제 코드

설명

mat3 = mat1 + mat2;

mat3 = mat1 - mat2;

mat1mat2 행렬 사이의 덧셈 및 뺄셈 연산을 수행합니다.12

mat3 = mat1 + s1;

mat3 = mat1 - s1;

mat3 = s1 + mat1;

mat3 = s1 - mat1;

mat1 행렬의 각 원소와 스칼라 값 s1 사이의 덧셈 및 뺄셈 연산을 수행합니다.

mat3 = -mat1;

mat1 행렬의 각 원소에 -1을 곱합니다.

mat3 = mat1 * mat2;

mat1mat2 행렬의 곱셈 연산을 수행합니다.

mat3 = mat1 * d1;

mat3 = d1 * mat1;

mat1 행렬의 각 원소에 실수 d1을 곱합니다.

mat3 = mat1 / mat2;

mat1mat2 행렬의 같은 위치 원소끼리 나눗셈 연산을 수행합니다.

mat3 = mat1 / d1;

mat3 = d1 / mat1;

mat1 행렬의 각 원소와 실수 d1끼리 나눗셈 연산을 수행합니다.

 

12 서로 타입이 다른 두 행렬을 더하거나 뺄 때에는 연산자 재정의 대신 add() 또는 subtract() 함수를 사용해야 합니다. add()subtract() 함수에 대해서는 6.1절에서 자세히 다루겠습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.