행렬의 행과 열을 서로 교환해서 만드는 전치 행렬(transpose matrix)은 Mat::t() 멤버 함수를 이용하여 구할 수 있습니다. Mat::t() 함수 원형은 다음과 같습니다.
MatExpr Mat::t() const; |
|
• 반환값 |
전치 행렬에 대한 행렬 표현식 |
만약 전치 행렬 연산의 입력 행렬이 정방 행렬(square matrix)이면 단순히 행렬 원소의 행과 열 위치만 서로 바꿉니다. 그러나 입력 행렬 크기가 M×N이고 M≠N이라면 Mat::t() 함수에 의해 구해지는 전치 행렬의 크기는 N×M으로 변경됩니다.
지금까지 설명한 행렬 연산 연산자와 함수를 사용하는 예제 코드를 살펴보겠습니다. 코드 3-12에 나타난 MatOp6() 함수는 작은 크기의 행렬로부터 역행렬과 전치 행렬을 구하고, 행렬의 덧셈 및 곱셈 연산을 수행하는 코드 작성 방법을 보여 줍니다.
코드 3-12 Mat 클래스를 이용한 간단한 행렬 연산 [ch03/MatOp]
01 void MatOp6() 02 { 03 float data[] = { 1, 1, 2, 3 }; 04 Mat mat1(2, 2, CV_32FC1, data); 05 cout << "mat1:\n" << mat1 << endl; 06 07 Mat mat2 = mat1.inv(); 08 cout << "mat2:\n" << mat2 << endl; 09 10 cout << "mat1.t():\n" << mat1.t() << endl; 11 cout << "mat1 + 3:\n" << mat1 + 3 << endl; 12 cout << "mat1 + mat2:\n" << mat1 + mat2 << endl; 13 cout << "mat1 * mat2:\n" << mat1 * mat2 << endl; 14 }
• 3~4행 data 배열을 원소로 사용하는 2×2 크기의 행렬 mat1을 생성합니다.
• 7행 mat1 행렬의 역행렬을 구하여 mat2에 저장합니다.
• 10행 mat1 행렬의 전치 행렬을 구하여 화면에 출력합니다.
• 11~13행 연산자 재정의를 이용하여 행렬의 산술 연산을 수행하고, 그 결과를 출력합니다.