Mat::create() 함수는 새로 만든 행렬의 원소 값을 초기화하는 기능이 없습니다. 그러므로 Mat::create() 함수를 이용하여 행렬을 생성한 후 행렬 전체 원소 값을 초기화하고 싶다면 OpenCV에서 제공하는 별도의 함수를 이용해야 합니다. Mat 클래스는 = 연산자 재정의 또는 Mat::setTo() 멤버 함수를 이용하여 행렬 전체 원소 값을 한꺼번에 설정할 수 있습니다.8 Mat 행렬의 전체 원소 값 설정을 위한 = 연산자 재정의와 Mat::setTo() 함수의 원형은 다음과 같습니다.
Mat& Mat::operator = (const Scalar& s); |
|
• s |
행렬 원소에 설정할 값 |
• 반환값 |
값이 설정된 Mat 객체의 참조 |
Mat& Mat::setTo(InputArray value, InputArray mask = noArray()); |
|
• value |
행렬 원소에 설정할 값 |
• mask |
마스크 행렬. 마스크 행렬의 원소가 0이 아닌 위치에서만 value 값이 설정됩니다. 행렬 전체 원소 값을 설정하려면 noArray() 또는 Mat()을 지정합니다. |
• 반환값 |
Mat 객체의 참조 |
Mat::setTo() 함수는 두 개의 인자를 가지고 있지만 두 번째 인자 mask는 기본값을 가지고 있으므로 생략할 수 있습니다. mask 인자를 생략하거나 mask 인자에 noArray() 또는 Mat()을 지정하면 행렬 전체 원소를 value 값으로 설정합니다. mask 인자는 영상의 특정 영역에 대해서만 원소 값을 설정하고 싶을 때 사용할 수 있으며, 마스크 연산에 대해서는 4.5.1절에서 자세히 다루겠습니다.
앞서 Mat::create() 함수를 이용하여 행렬 mat4와 mat5를 새로 생성하였으므로 이 두 행렬의 모든 원소 값을 일괄적으로 설정하는 예제 코드를 만들어 보겠습니다.
mat4 = Scalar(255, 0, 0); mat5.setTo(1.f);
8 만약 행렬의 원소 값을 개별적으로 설정하고 싶다면 Mat::at() 멤버 함수를 사용할 수 있으며, 이 방법은 3.2.5절에서 자세히 다루겠습니다.