2012-04-08 3 views
3

비디오 파일에서 cv::VideoCapture으로 움켜 잡은 cv::Mat -frames의 유형을 알고 싶습니다. 문서에서는이를 명시하지 않고 있습니다 (종종 그렇듯이,이 특별한 경우에 간과 했음에도 불구하고 일반적으로 문제를 해결하기위한 답을 얻는 것이 도움이 될 것입니다).사람이 읽을 수있는 cv :: Mat 유형을 결정하는 방법은 무엇입니까?

물론 적절한 OpenCV 헤더 파일을 열어 ... 매크로를 통해 매트의 type()과 일치하는 매크로를 찾을 수 있습니다. 하지만 나는 그런 것에 질 렸습니다. 더 쉬운 방법이 있어야합니다.

매트의 type()을 사람이 읽을 수있는 형식으로 변환 할 수있는 기능이 없습니까? 좋아요 :

cv::Mat myMatWithUnknownType; 

// Some code modifying myMatWithUnknownType. 
// ... 

std::string readableType = myMatWithUnknownType.typeString(); 
std::cout << readableType; // Prints "CV_64FC3". 

어떻게 처리합니까?

답변

1

먼저 카메라에서 가져온 형식은 CV_8UC3입니다. 이것은 OpenCV에서 하드 코딩되며 모든 비디오 형식은 사용자에게 전송되기 전에 변환됩니다. 그래서

capture >> frame; 

항상 채널 당 8 비트의하는 RGB 이미지를 반환합니다.

지금, 당신이 OpenCV의 지원 이렇게 많은 종류가 아니라는 것을 중앙에두고, 당신의 기능을 쓸 수있는 다른 유형 : 매트 타입 char, uchar, short, ushort, int, uint, float이 될 수 있습니다, double , 1 ~ 512 채널 (최신 문서에 따르면). 따라서 자신의 type_to_string()을 작성하는 것은 어렵지 않습니다.

관련 문제