CV ::数据类型<>与cv :: traits :: Type<>

时间:2018-02-19 01:01:31

标签: c++ opencv

据我所知(我找不到合适的文档),在OpenCV 3.3中,cv::DataTypecv::traits::Type<>取代,所以为了在两个版本上编译,我需要做一些事情像这样:

template <typename T>
void f(cv::Mat &src)
{
    using DstPixel = cv::Vec<T, 3>;

    dst.create(src.rows,
               src.cols,
#if CV_VERSION_MAJOR >= 3 && CV_VERSION_MINOR >= 3
               cv::traits::Type<DstPixel>::value);
#else
               cv::DataType<DstPixel>::type);
#endif
}

这看起来有点混乱,似乎有点奇怪,没有针对次要版本更改的向后兼容路径。是否有更简洁的方法来使用任一版本编译代码?

(请注意,this answer还需要更新为cv::traits::Type<>

1 个答案:

答案 0 :(得分:1)

一种可能的解决方案是在项目OPENCV_TRAITS_ENABLE_DEPRECATED中定义一个位置  与 #define OPENCV_TRAITS_ENABLE_DEPRECATED 或作为编译选项 -DOPENCV_TRAITS_ENABLE_DEPRECATED

如果已定义,则可以继续在代码中使用旧的DataType结构:

cv::DataType<DstPixel>::type

但是,已引入新的特征系统来解决与DataType相关的某些问题。 参见https://github.com/opencv/opencv/issues/10115