【问题标题】:type traits for OpenCV data typesOpenCV 数据类型的类型特征
【发布时间】:2014-08-27 06:36:04
【问题描述】:

我有一个模板方法,其中构造了一个 Mat 对象。该矩阵的类型取决于模板实现:

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

在这种情况下,我使用基本特征,如果 T=float 等,getCVType&lt;T&gt;::value 将返回 CV_32F。我知道这很愚蠢,因为我本可以使用 Mat_&lt;T&gt;(rows,cols) 而忘记为此使用特征。但这让我想到:OpenCV 中是否有任何可用的特征(或任何模板内容)可以在编译时从类型推断类型宏(CV_32F、CV_8U、...)?

【问题讨论】:

  • AFAIK 没有,但您可以轻松地自己实现它们。
  • @GermánDiago 这就是我最初的想法,我已经实现了这个getCVtype trait thingy :) 但是,奇怪的是,OpenCV API 中没有提供任何方法,不是吗?
  • 嗯,API 主要来自 C,所以如果他们不提供,我不会感到惊讶。

标签: c++ templates opencv typetraits


【解决方案1】:

opencv 确实有这个任务的类型特征,它叫做 cv::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");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-30
    • 2014-06-10
    • 1970-01-01
    • 2016-07-31
    • 2010-12-26
    • 2018-04-11
    • 2021-09-14
    • 2018-02-26
    相关资源
    最近更新 更多