从Mat转换为Matx33f

时间:2014-06-13 10:40:01

标签: c++ opencv

有没有办法将Mat对象转换为小矩阵(形式矩阵:Matx22f,Matx33f等等)?

我知道相反的情况可能 - 例如从Matx33f转换为Mat。)

感谢

1 个答案:

答案 0 :(得分:3)

是的Matx22fMatx<float,2,2>的typedef,它有一个构造函数,可以获取指向元素数组的指针:

explicit Matx(const _Tp* vals); //!< initialize from a plain array

因此,您可以将mat转换为c样式数组并将其发送到Matx:

cv::Mat mat(2,2, CV_32F);
float* data = reinterpret_cast<float*>(mat.data);//cast mat.data to float*
cv::Matx22f converted(data);//make Matx22f

或者如果你想在构造Matx22f之前复制元素:

cv::Mat mat(2,2, CV_32F);
float* data = reinterpret_cast<float*>(mat.data);
int size = mat.rows * mat.cols;
std::vector<float> vec(size);
std::copy(data + 0, data + size, vec.begin());
cv::Matx22f converted(&vec[0]);