이 예제 코드에서 mat1은 0으로 초기화된 3×4 행렬이고, 각 원소는 uchar 자료형을 사용합니다. 그러므로 Mat::at() 함수를 사용할 때 <> 괄호 안에 uchar 자료형을 명시하였습니다. 코드에서 바깥쪽 for 반복문은 행렬의 전체 행에 대한 반복이고, 변수 j는 각 행의 번호를 나타냅니다. 그리고 안쪽 for 반복문은 j번째 행의 전체 열에 대한 반복이고, 변수 i는 각 열의 번호를 나타냅니다. for 반복문 안에서는 Mat::at() 함수를 이용하여 j번째 행, i번째 열의 원소를 참조하고 그 값을 1만큼 증가시킵니다. Mat::at() 함수가 행렬 원소를 참조로 반환하기 때문에 Mat::at() 함수의 반환값을 변경하면 mat1 행렬 원소 값도 함께 변경됩니다.
앞 예제 코드에서 Mat::at() 함수가 참조하는 행렬 원소 위치를 그림 3-6에 알아보기 쉽게 나타냈습니다. 그림 3-6은 uchar 자료형을 사용하는 3×4 행렬 mat1을 나타냅니다. Mat 행렬에서 특정 원소의 위치를 나타낼 때 행과 열 번호를 0-기반으로 표현하기 때문에 mat1 행렬에서 맨 첫 번째 원소는 mat1.at<uchar>(0, 0) 형태로 참조한다는 점을 기억하기 바랍니다.
▲ 그림 3-6 Mat::at() 함수의 동작 방식
Note
이 절에서는 Mat::at() 함수를 사용하는 기본적인 방법과 예제에 대해서만 설명했습니다. Mat::at() 함수를 이용하여 실제로 영상 처리 기법을 구현하는 방법은 5.1.3절에서 좀 더 자세히 다루겠습니다. 또한 컬러 영상처럼 여러 개의 채널을 가지고 있는 행렬을 다룰 때 Mat::at() 함수를 사용하는 방법에 대해서는 10.1.1절에서 자세히 설명하겠습니다.