1

我正在编写一个带有一些行的函数,以将 2d STL 向量转换为 OpenCV Mat。因为,OpenCV 支持使用 Mat(vector) 从向量初始化 Mat。但这一次,我尝试了一个 2D 矢量,但没有成功。

该功能很简单,例如:

template <class NumType>
Mat Vect2Mat(vector<vector<NumType>> vect)
{
    Mat mtx = Mat(vect.size(), vect[0].size(), CV_64F, 0);  // don't need to init??
    //Mat mtx;

    // copy data
    for (int i=0; i<vect.size(); i++)
        for (int j=0; j<vect[i].size(); j++)
        {
            mtx.at<NumType>(i,j) = vect[i][j];
            //cout << vect[i][j] << " ";
        }   

    return mtx;
}

那么有没有办法用 NumType 相应地初始化 Mat mtx?语法始终固定为 CV_32F、CV_64F、....,因此非常受限制

谢谢!

4

1 回答 1

1

我想我已经找到了 OpenCV 文档中给出的答案。他们通过使用 DataType 类将该技术称为“类特征”。

就像是:

Mat mtx = Mat::zeros(vect.size(), vect[0].size(), DataType<NumType>::type);

例如:

  template <class NumType>
cv::Mat Vect2Mat(std::vector<std::vector<NumType>> vect)
{
    cv::Mat mtx = cv::Mat::zeros(vect.size(), vect[0].size(), cv::DataType<NumType>::type);  
    //Mat mtx;

    // copy data
    for (int i=0; i<vect.size(); i++)
        for (int j=0; j<vect[i].size(); j++)
        {
            mtx.at<NumType>(i,j) = vect[i][j];
            //cout << vect[i][j] << " ";
        }   

        return mtx;
}
于 2013-01-12T09:59:04.123 回答