이 코드에서 그레이스케일 영상 img5는 모든 픽셀 밝기가 128로 설정됩니다. 그리고 컬러 영상 img6에 대해서는 초깃값으로 Scalar(0, 0, 255)를 지정하였으며, 이는 순수한 빨간색을 나타냅니다. Scalar 클래스를 이용하여 컬러 영상의 색상을 지정할 때에는 파란색(B), 녹색(G), 빨간색(R) 색상 성분 순서로 값을 지정합니다.
새로운 행렬을 생성할 때 모든 원소 값을 0으로 초기화하는 경우가 많으며, 이러한 경우 Mat 클래스의 행렬 원소 초깃값에 Scalar(0)을 지정하면 됩니다. 그런데 이처럼 행렬 원소가 0으로 초기화된 행렬을 생성하는 경우가 많기 때문에 OpenCV는 이러한 용도의 함수를 별도로 제공합니다. OpenCV에서 모든 원소가 0으로 초기화된 행렬을 만드는 함수 이름은 Mat::zeros()입니다.
static MatExpr Mat::zeros(int rows, int cols, int type); static MatExpr Mat::zeros(Size size, int type); |
|
• rows |
새로 만들 행렬의 행 개수(영상의 세로 크기) |
• cols |
새로 만들 행렬의 열 개수(영상의 가로 크기) |
• size |
새로 만들 행렬의 크기 |
• type |
새로 만들 행렬의 타입 |
• 반환값 |
모든 원소가 0으로 초기화된 행렬 표현식 |
Mat::zeros() 함수는 새로 생성할 행렬의 크기와 타입 정보를 인자로 받습니다. Mat::zeros() 함수는 Mat 클래스의 정적 멤버 함수이기 때문에 실제 코드에서 사용할 때 Mat::을 붙여서 사용해야 합니다. Mat::zeros() 함수의 반환형인 MatExpr은 OpenCV에서 행렬의 대수 연산을 표현하는 클래스이며, 자동으로 Mat 클래스로 형 변환됩니다. 그러므로 Mat::zeros() 함수의 반환값은 Mat 타입의 변수에 할당할 수 있습니다. 예를 들어 0으로 초기화된 3×3 정수형 행렬을 생성하려면 다음과 같이 코드를 작성합니다.
Mat mat1 = Mat::zeros(3, 3, CV_32SC1); // 0's matrix