opencv 2 - 如何仅计算两幅图像之间的平移和缩放?

时间:2015-04-08 08:49:48

标签: opencv

我正在寻找一种方法,只使用opencv计算两个图像之间的平移和缩放。我只遇到了一个严格的转换实现,它将比例信息与轮换捆绑在一起,我对此并不感兴趣。

你怎么建议我这样做?

注意,在下面的代码中,两个超过相等的角度不是,实际上angle2 = 2 *角。我不确定为什么:

    cv::Mat rigid_mat = cv::estimateRigidTransform(prevMatGray, thisMatGray, false);
    float tx = rigid_mat.at<float>(0,2);
    float ty = rigid_mat.at<float>(1,2);

    float a = rigid_mat.at<float>(0,0);
    float b = rigid_mat.at<float>(0,1);

    float c = rigid_mat.at<float>(1,0);
    float d = rigid_mat.at<float>(1,1);

    float sX = [BTImageProcessing sign:a] * sqrtf(powf(a,2) + powf(b,2));
    float sY = [BTImageProcessing sign:d] * sqrt(powf(c,2) + powf(d,2));
    float alpha = atan2f(c, d);
    float alpha2 = atan2f(-b, a);


+ (int)sign:(float)num{
    return num > 0 ? 1 : -1;
}

1 个答案:

答案 0 :(得分:4)

您可以使用estimateRigidTransform()计算两个2D点集之间的最佳仿射变换[A|b](2x3浮点矩阵)。接下来,您应该将转换矩阵分解为缩放和转换,例如here(sx,sy,xc,yc)并且不关心旋转。

http://i.stack.imgur.com/rhsh8.png