기존의 mat1 행렬이 3×4 크기였지만 mat1.resize(5, 100) 코드에 의해 5×4 크기의 행렬로 변경되고, 새로 추가된 행의 원소는 모두 100으로 설정됩니다. 실제로 이 코드를 실행한 후 mat1 행렬을 출력해 보면 다음과 같습니다.
[ 1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12; 100, 100, 100, 100; 100, 100, 100, 100]
이미 존재하는 행렬에 원소 데이터를 추가하고 싶을 때에는 Mat::push_back() 멤버 함수를 사용할 수 있습니다. Mat::push_back() 함수는 다음과 같이 다양한 형식으로 정의되어 있습니다.
template<typename _Tp> void Mat::push_back(const _Tp& elem); template<typename _Tp> void Mat::push_back(const Mat_<_Tp>& elem); template<typename _Tp> void Mat::push_back(const std::vector<_Tp>& elem); void Mat::push_back(const Mat& m); |
|
• elem |
행렬의 맨 마지막 행에 추가할 원소 데이터 |
• m |
행렬의 맨 마지막 행에 추가할 행렬. *this와 타입과 열 개수가 같아야 합니다. |
Mat::push_back() 함수 인자로 _Tp& 또는 std::vector<_Tp>& 타입을 사용할 경우, *this 행렬은 1열짜리 행렬이어야 합니다. 만약 Mat_<_Tp>& 또는 Mat& 타입을 인자로 사용할 경우에는 *this 행렬과 인자로 전달된 m 행렬의 열 개수가 같아야 합니다. 앞에 나열한 네 가지 Mat::push_back() 함수 모두 *this 행렬의 타입과 인자로 전달된 데이터의 타입은 같아야 합니다. 다음은 Mat::push_back() 함수를 이용하여 3×4 크기의 행렬 mat1에 1×4 크기의 행렬 mat3을 맨 마지막 행으로 추가하는 예제 코드입니다.
Mat mat3 = Mat::ones(1, 4, CV_8UC1) * 255; mat1.push_back(mat3);