如何在opencv中获取矩阵的一部分

How to get a section of a matrix in opencv

本文关键字:一部分 获取 opencv      更新时间:2023-10-16

我在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部分=Mat(A,rect);