有没有办法将Mat对象转换为小矩阵(形式矩阵:Matx22f,Matx33f等等)?
我知道相反的情况可能 - 例如从Matx33f转换为Mat。)
感谢
答案 0 :(得分:3)
是的Matx22f
是Matx<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]);