opencv - opencv Mat从Vector的模板初始化

标签 opencv stl vector mat

我正在编写一个包含一些行的函数,用于将 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 固定,....因此,非常受限制

谢谢!

最佳答案

我想我已经从 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;
}

关于opencv - opencv Mat从Vector的模板初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14291165/

相关文章:

c++ - std::sort 和自定义交换函数

c++ - pop_back() 可以减少 vector 的容量吗? (C++)

c++ - 如何将元素添加到 vector 的字符串位置

c++ - opencv 二进制数据 jpg 图像到 cv::Mat

python - 使用python中的套接字编程将视频流从服务器发送到客户端

c++ - 具有特定类型作为泛型参数的 STL 容器

C++ STL链表

opencv - 从外部轮廓创建蒙版以移除图像背景

python - 我的编码有什么问题? 'AttributeError ' 模块'对象没有属性 'VideoWriter fourcc''

c++ - 为什么 Vector 中的 Erase 和 Insert 函数会使迭代器失效?