我想测量两个图像中两个对象之间的旋转。通过旋转第一个图像来创建第二个图像。 我尝试过类似拟合直线的技术,但就像您可以看到它们具有相同的坡度/角度一样。
这是我的代码:
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()
原始图片:
原始图像旋转180°:
答案 0 :(得分:0)
您可以计算质心,并找到距中心最远的点。基于这两点,您可以计算线。您可以找到第三条点,它是距该直线最远的点,并且属于该对象。除非您的对象是对称的,否则这组3点将为您提供独特的解决方案。 基于这三个点,您可以计算原始图像和旋转图像之间的旋转: