代码使用SVD估算2组点的平移和旋转矩阵。
vector<Point2f> ptOrigin(matchesNumber), ptTarget(matchesNumber);
Point2f ptCenterOrigin(0, 0), ptCenterTarget(0, 0);
Mat X(2, matchesNumber, CV_32F), Y(matchesNumber, 2, CV_32F);
for(int i = 0; i < matchesNumber; i++)
{
X.at<double>(0, i) = ptOrigin[i].x - ptCenterOrigin.x;
X.at<double>(1, i) = ptOrigin[i].y - ptCenterOrigin.y;
Y.at<double>(i, 0) = ptTarget[i].x - ptCenterTarget.x;
Y.at<double>(i, 1) = ptTarget[i].y - ptCenterTarget.y;
}
Mat S, w, u, vt;
S = X * Y;
SVD::compute(S, w, u, vt);
这一行有问题:S = X * Y;
。错误消息是:malloc:***对象0x10105f3f8的错误:释放对象的校验和不正确 - 对象可能在被释放后被修改。
***在malloc_error_break中设置断点以进行调试。
我是OpenCV的新手,有人可以帮助我吗?谢谢
答案 0 :(得分:1)
我不确定这是否是问题,但CV_32F应该使用float访问,而不是double。