cv::D ataType<> 与 cv::traits::Type<>

cv::DataType<> versus cv::traits::Type<>

本文关键字:gt cv lt Type traits ataType      更新时间:2023-10-16

据我所知(但是我找不到像样的文档),在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
}

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

(注意这个答案也需要更新才能cv::traits::Type<>)

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

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

cv::DataType<DstPixel>::type

但是,引入了新的特征系统来解决与数据类型相关的一些问题。 见 https://github.com/opencv/opencv/issues/10115