据我所知(不过,我找不到像样的文档),在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<>)
发布于 2018-10-26 15:32:13
一种可能的解决方案是在项目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
https://stackoverflow.com/questions/48858328
复制相似问题