我在openCV中有这个矩阵:
cv::Matx44d m;
我希望从这个矩阵中获取左上角的3x3矩阵。有什么简单快速的方法可以做到这一点?
以下是我可以做到的方法:
cv::Matx44d m;
cv::Matx33d o;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
o(i,j)=m(i,j);
}
}
但如果有更简单和更快的方法,我会寻找它!
我在openCV中有这个矩阵:
cv::Matx44d m;
我希望从这个矩阵中获取左上角的3x3矩阵。有什么简单快速的方法可以做到这一点?
以下是我可以做到的方法:
cv::Matx44d m;
cv::Matx33d o;
for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
o(i,j)=m(i,j);
}
}
但如果有更简单和更快的方法,我会寻找它!
Matx有一个叫做get_minor()的函数,可以精确地实现您想要的功能。我在OpenCV文档中没有看到它,但它在实现中存在。在您的情况下,它应该是:
o = m.get_minor<3,3>(0,0);
模板参数<3, 3>表示小矩阵的高度和宽度。值(0,0)是裁剪矩阵的起点。
Matx44d m = ...;
Mat33xd o( m(0), m(1), m(2),
m(4), m(5), m(6),
m(8), m(9), m(10) );
这个怎么样?
//! creates a matrix header for a part of the bigger matrix
Mat(const Mat& m, const Range& rowRange, const Range& colRange=Range::all());
Mat(const Mat& m, const Rect& roi);
Mat(const Mat& m, const Range* ranges);
你可以这样写: Mat part = Mat(A, rect );