【发布时间】:2015-07-16 00:04:01
【问题描述】:
我有这个 sn-p 来执行齐次矩阵的逆
Mat invHom(const Mat A)
{
Mat invA = Mat::eye(4,4,CV_64FC1);
Mat R, P;
A(Range(0,3), Range(0,3)).copyTo(R);
A(Range(0,3), Range(3,4)).copyTo(P);
invA(Range(0,3), Range(0,3)) = R.t();
invA(Range(0,3), Range(3,4)) = -R.t()*P;
return invA;
}
此代码是否容易出错?因为 invA、R、P 是在函数范围内创建的 Mat。函数的“返回”是否执行创建和复制到新的 Mat 对象(即 Mat::copyTo()),以便 invA 的值在函数外部仍然可用?
抱歉我的英语和编程条件不好
没有错误的:
int invHom(const Mat A, Mat& invA_ou)
{
Mat invA = Mat::eye(4,4,CV_64FC1);
Mat R, P;
A(Range(0,3), Range(0,3)).copyTo(R);
A(Range(0,3), Range(3,4)).copyTo(P);
//invA(Range(0,3), Range(0,3)) = R.t();
//invA(Range(0,3), Range(3,4)) = -R.t()*P;
Mat tmp1 = R.t();
tmp1.copyTo(invA(Range(0,3), Range(0,3)));
Mat tmp = -R.t()*P;
tmp.copyTo(invA(Range(0,3), Range(3,4)));
invA.copyTo(invA_ou);
return 1;
}
【问题讨论】: