我正在编写一个带有一些行的函数,用于将2d STL向量转换为OpenCV Mat。因为,OpenCV支持使用Mat(向量)从向量初始化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相应地对Matttx进行初始化?语法总是用CV_32F,CV_64F,....修复,因此非常受限
谢谢!
答案 0 :(得分:2)
我想我已经找到了OpenCV文档给出的答案。他们通过使用DataType类来调用技术“Class Trait”。
就像:
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;
}