计算两个图像之间的旋转

时间:2019-07-03 15:06:07

标签: python opencv image-processing rotation

我想测量两个图像中两个对象之间的旋转。通过旋转第一个图像来创建第二个图像。 我尝试过类似拟合直线的技术,但就像您可以看到它们具有相同的坡度/角度一样。

这是我的代码:


import cv2
import numpy as np
import matplotlib.pyplot as plt
#import imutils

img = cv2.imread("4.jpg",0)
indices = np.where(img!= [255])
coordinates = zip(indices[0], indices[1])

from scipy.optimize import curve_fit

def f(x, A, B): # this is your 'straight line' y=f(x)
    return A*x + B

A,B = curve_fit(f, indices[1], indices[0])[0] # your data x, y to fit
x=np.arange(0,1000,1)
y=A*x+B
#%%
plt.plot(y)
plt.scatter(indices[1],indices[0])

plt.show()


原始图片:

Original image


原始图像旋转180°:

Original image rotated by 180°

1 个答案:

答案 0 :(得分:0)

您可以计算质心,并找到距中心最远的点。基于这两点,您可以计算线。您可以找到第三条点,它是距该直线最远的点,并且属于该对象。除非您的对象是对称的,否则这组3点将为您提供独特的解决方案。 基于这三个点,您可以计算原始图像和旋转图像之间的旋转:

  1. 使用getAffineTransform https://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#Mat%20getAffineTransform(InputArray%20src,%20InputArray%20dst)函数计算矩阵
  2. 使用来自此链接的方程式opencv estimateRigidTransform: How to get global scale?
  3. 通过旋转此矩阵来计算角度。
  4. 此外,您还可以从此矩阵获取比例因子和转换向量。