예를 들어 현재 다루고 있는 영상 객체가 그레이스케일 영상인지 혹은 3채널 컬러 영상인지를 확인하려면 Mat::type() 멤버 함수를 이용할 수 있습니다. 일반적으로 그레이스케일 영상은 CV_8UC1 타입을 사용하며, 3채널 컬러 영상은 CV_8UC3 타입을 사용합니다. 그러므로 Mat::type() 함수의 반환값이 CV_8UC1이면 그레이스케일 영상으로 간주하고, CV_8UC3이면 3채널 트루컬러 영상이라고 생각할 수 있습니다. 실제로 앞에서 사용한 예제 코드에서 img1에 저장된 레나 영상이 그레이스케일 영상인지 컬러 영상인지를 확인하는 문자열을 출력하려면 다음과 같이 코드를 작성할 수 있습니다.
if (img1.type() = = CV_8UC1) cout << "img1 is a grayscale image." << endl; else if (img1.type() = = CV_8UC3) cout << "img1 is a truecolor image." << endl;
앞에서 lenna.bmp 파일로부터 img1 영상을 불러올 때, imread() 함수의 두 번째 인자를 설정하지 않았으므로 img1 영상은 3채널 컬러 영상으로 생성됩니다. 그러므로 img1 영상의 타입은 CV_8UC3이고, 앞 예제 코드는 다음 문자열을 출력합니다.
img1 is a truecolor image.
Mat 객체에 저장된 행렬 속성 정보가 아니라 행렬 원소 값을 직접 확인하고 싶은 경우도 있습니다. 만약 Mat 클래스에 저장된 객체가 영상이라면 imshow() 함수를 이용하여 화면에 표시할 수 있습니다. 그러나 Mat 객체에 int, float, double 같은 자료형의 행렬이 저장되어 있는 경우라면 imshow() 함수를 사용하는 것이 적절하지 않습니다. 이런 경우에는 C++ 표준 출력 스트림 std::cout으로 Mat 객체에 저장된 행렬 원소를 출력할 수 있습니다. OpenCV는 << 연산자 재정의를 이용하여 행렬 원소를 출력하는 기능을 제공합니다.
static inline std::ostream& operator << (std::ostream& out, const Mat& mtx) |
|
• out |
C++ 표준 출력 스트림 객체 |
• mtx |
출력할 행렬 |
• 반환값 |
C++ 표준 출력 스트림 객체의 참조 |