2014-08-27 3 views
1

У меня есть шаблонный метод, в котором построен объект Mat. Тип этой матрицы зависит от реализации шаблона:типы типов для типов данных OpenCV

template <typename T> 
void createMatrixAndDoStuff(int rows, int cols){ 
// ... 
Mat A(rows,cols,getCVtype<T>::value); 
// ... 
} 

В этом случае я использую основную черту, getCVType<T>::value вернется CV_32F если T=float и т.д. Я знаю, что это глупо, потому что я мог бы использовать Mat_<T>(rows,cols) и забыть об использовании черт для этого. Но это заставило меня подумать: есть ли какой-либо доступный признак (или любой материал шаблона) в OpenCV для вывода макросов типа (CV_32F, CV_8U, ...) во время компиляции из типов?

+0

AFAIK там нет, но вы можете легко реализовать их самостоятельно , –

+0

@ GermánDiago это то, что я думал, в первую очередь, я уже реализовал эту функцию getCVtype. Но все же странно, что в API OpenCV не предусмотрено никаких методов? –

+1

Ну, API был в основном от C, поэтому я не удивлюсь, если они этого не предоставят. –

ответ

3

OpenCV есть черты типа для этой задачи, она называется резюме :: DataType, вам не нужно, чтобы создать самостоятельно

static_assert(cv::DataType<float>::type == CV_32F, 
       "cv::DataType<float>::type == CV_32F"); 
static_assert(cv::DataType<uchar>::type == CV_8U, 
       "cv::DataType<uchar>::type == CV_8U"); 
static_assert(cv::DataType<cv::Vec3b>::type == CV_8UC3, 
       "cv::DataType<cv::Vec3b>::type == CV_8UC3");