据我所知(我找不到合适的文档),在OpenCV 3.3中,cv::DataType
被cv::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<>
)
答案 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