더북(TheBook)

3.2.8 크기 및 타입 변환 함수

이 절에서는 Mat 클래스의 크기 또는 타입을 변화시키는 멤버 함수에 대해 소개합니다. 먼저 행렬의 타입을 변경할 때에는 Mat::convertTo() 함수를 사용합니다. Mat::convertTo() 함수 원형은 다음과 같습니다.

void Mat::convertTo( OutputArray m, int rtype, double alpha=1, double beta=0 ) const;

m

출력 행렬. 만약 m 행렬이 적절한 크기와 타입이 아닌 경우 행렬 원소 데이터를 새로 할당합니다.

rtype

원하는 출력 행렬의 타입. 만약 rtype이 음수이면 출력 행렬은 입력 행렬과 같은 타입을 갖습니다.

alpha

추가적으로 곱할 값

beta

추가적으로 더할 값

 

Mat::convertTo() 함수는 행렬 원소의 타입을 다른 타입으로 변경하고, 추가적으로 모든 원소에 일정한 값을 더하거나 곱할 수 있습니다. Mat::convertTo() 함수에 의해 생성되는 출력 행렬 m의 원소 값은 다음 수식에 의해 결정됩니다.

그렇다면 어떠한 경우에 Mat::convertTo() 함수가 사용될까요? 일반적인 영상은 각 픽셀 값을 uchar 자료형을 이용하여 표현합니다. 그러나 일련의 복잡한 연산을 수행해야 할 경우, 연산의 정확도를 높이기 위하여 픽셀 값을 정수형이 아닌 float, double 같은 실수형으로 변환하여 내부 연산을 수행하기도 합니다. 이러한 경우에 Mat::convertTo() 함수를 사용하여 CV_8UC1 타입의 행렬을 CV_32FC1 타입으로 변경할 수 있습니다. 또는 0부터 1 사이의 실수 값으로 구성된 2차원 행렬을 영상 형태로 화면에 나타내고 싶을 때, 행렬의 모든 원소에 255를 곱한 후 uchar 자료형으로 변환하여 그레이스케일 영상 형식으로 만든 후 imshow() 함수를 사용하여 화면에 출력할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.