opencv 2 - 如何只计算两个图像之间的平移和比例?

标签 opencv

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

你建议我怎么做?

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

    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;
}

最佳答案

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

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

关于opencv 2 - 如何只计算两个图像之间的平移和比例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29510015/

相关文章:

Embarcadero C++ Builder 中的 OpenCV 2.3

c++ - 在opencv和c++中画西门子星

c++ - 为 Windows 10 64 位安装的 OpenCV3.2.0 中缺少许多 .lib 文件

opencv - CImg 库中的 get_convolve() 函数正在使用哪个过滤器

.net - Windows 窗体应用程序 vc++ 上的 opencv 鼠标处理

macos - 视频样本帧

c++ - 如何在 Raspberry Pi 上使用 OpenCV 和 C++ 加载视频文件?

c++ - 黄色检测程序断言失败

c++ - opencv查找连通分量的周长

c++ - PvBuffer (Pleora SDK) 到 -> Opencv 缓冲区