2010-06-26 4 views
3
나는 이력서 :: 매트를 만들 필요가 OpenCV의에서는

, 나는 단지 알고있는 경우에 I가 필요하다는 것을 어떻게됩니까구성 OpenCV의 요소 유형은

cv::Mat new_mat(width, height, CV_32FC3) 

의 라인을 따라 뭔가를해야합니다 요소가 float 또는 double이 될지, 런타임에 1/2/3 채널이 필요한지 여부

즉, 요소 ​​유형 (float) 및 채널 수 (int)가 주어지면 어떻게 CV_32FC3이라는 용어를 구성 할 수 있습니까?

답변

5

cxtypes.h의 출처를 읽으십시오. 그것은 같은 라인을 포함하는 다음

#define CV_MAKETYPE(depth,cn) (CV_MAT_DEPTH(depth) + (((cn)-1) << CV_CN_SHIFT)) 

이 다음 코드 제안 :

#define CV_32FC1 CV_MAKETYPE(CV_32F,1) 
#define CV_32FC2 CV_MAKETYPE(CV_32F,2) 
#define CV_32FC3 CV_MAKETYPE(CV_32F,3) 
#define CV_32FC4 CV_MAKETYPE(CV_32F,4) 
#define CV_32FC(n) CV_MAKETYPE(CV_32F,(n)) 

#define CV_64FC1 CV_MAKETYPE(CV_64F,1) 
#define CV_64FC2 CV_MAKETYPE(CV_64F,2) 
#define CV_64FC3 CV_MAKETYPE(CV_64F,3) 
#define CV_64FC4 CV_MAKETYPE(CV_64F,4) 
#define CV_64FC(n) CV_MAKETYPE(CV_64F,(n)) 

CV_MAKETYPE는 다음과 같이 정의된다

bool isdouble; 
int nchannels; 
// ... 
if (isdouble) typeflag = CV_64FC(nchannels); 
else typeflag = CV_32FC(nchannels); 

나는이 테스트하지 않았습니다를; 작동하는지 알려주세요. 또한 : opencv의 끔찍한 타입 안전성을 싫어합니다.

+0

저는 단문 대신 CV_MAKETYPE을 직접 사용합니다. 귀하의 솔루션이 작동합니다. –

+0

@Date Chu : 각 요소의 typename 만 갖는 깊이는 어떻게 알 수 있습니까? (템플릿 메서드에서 형식을 계산하려면 노력하고있어). – Renan