더북(TheBook)

Note

OpenCV 함수 중에는 그레이스케일 영상만을 입력으로 받는 함수도 있고, 반대로 BGR 3채널 컬러 영상만을 입력으로 받는 함수가 있습니다. 그레이스케일 영상을 입력으로 받는 함수에 컬러 영상을 전달하면 에러가 발생하여 프로그램이 종료되는 경우도 있습니다. 그러므로 Mat 객체의 타입을 제대로 파악하여 사용하는 것은 매우 중요합니다.

만약 여러분이 만든 함수에서 입력으로 전달된 영상이 그레이스케일 영상인지를 확인하려면 Mat::type() 멤버 함수 반환값이 CV_8UC1인지를 확인하면 됩니다. 예를 들어 여러분이 직접 만든 함수에 전달된 인자가 그레이스케일 영상인지를 확인하려면 다음과 같이 소스 코드를 작성합니다.

void func(Mat& img)
{
  CV_Assert(img.type() = = CV_8UC1);
 
 // 그레이스케일 영상 처리 수행
}

여기에 나타낸 func() 함수는 전달된 img 영상의 타입이 CV_8UC1인 경우에만 정상적으로 실행되고, 그렇지 않은 경우에는 에러가 발생하면서 프로그램이 종료됩니다. 이 소스 코드에서 사용된 CV_Assert()는 OpenCV에서 제공하는 매크로 함수로서 괄호 안의 조건식이 참(true)이면 정상적으로 함수를 진행하고, 거짓(false)이면 에러를 발생시킵니다.

CV_Assert(expr)
CV_DbgAssert(expr)

expr

조건식. 조건식이 거짓(false)이면 에러가 발생하며 프로그램이 종료합니다.

 

참고로 앞에서 CV_Assert()와 함께 나타낸 CV_DbgAssert() 매크로 함수는 디버그 모드에서만 동작하고, CV_Assert() 함수는 디버그 모드와 릴리스 모드에서 모두 동작합니다. CV_Assert() 매크로에 전달된 조건식이 거짓이면 그림 5-1과 같이 커맨드창에 에러 메시지를 출력하며, 이 메시지를 활용하여 잘못된 소스 코드를 수정할 수 있습니다.

▲ 그림 5-1 CV_Assert( ) 함수에 의한 예외 발생

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