Opencv 如何找到两个二值图像之间的旋转

Opencv 如何找到两个二值图像之间的旋转,opencv,image-processing,rotation,emgucv,Opencv,Image Processing,Rotation,Emgucv,我需要找到两个二值图像之间的旋转角度。因此,我可以通过按指定角度旋转图像来纠正旋转。有人能帮忙吗 我已经尝试过主轴旋转角度,但没有给出准确的结果。谁能给我推荐一个更好的方法吗。这张照片可以是任何东西。它不需要是我上传到这里的图像。但是所有的图像都是二进制的。 来源 按说明应用细化算法 现在为每个连续点计算角度 double angle = atan2(p1.y - p2.y, p1.x - p2.x) 对第二个图像执行相同操作,并计算角度差 对于每个图像 设置图像阈值,使对象像素为非零

我需要找到两个二值图像之间的旋转角度。因此,我可以通过按指定角度旋转图像来纠正旋转。有人能帮忙吗

我已经尝试过主轴旋转角度,但没有给出准确的结果。谁能给我推荐一个更好的方法吗。这张照片可以是任何东西。它不需要是我上传到这里的图像。但是所有的图像都是二进制的。

  • 来源

  • 按说明应用细化算法

  • 现在为每个连续点计算角度

    double angle = atan2(p1.y - p2.y, p1.x - p2.x)
    
  • 对第二个图像执行相同操作,并计算角度差

对于每个图像

  • 设置图像阈值,使对象像素为非零,背景像素为零
  • 找到非零像素的凸出(您可以使用任何方法来减少用于计算凸出的点数,例如第一次找到轮廓。主要思想是找到凸出)
  • 使用MinareRect计算最小面积矩形,它将返回一个RotatedRect对象(在C++中)。此对象包含旋转角度
  • 区别对待

注意:如果结果min area rect返回相同的角度,尽管对象旋转不同,这种方法将不起作用。因此,我觉得最好使用其他度量方法,例如填充的凸轮的力矩来计算旋转:

仅对黑色像素执行此操作。我仅使用黑色正确标记尝试主轴旋转。但它不是很准确。有时2或3度是关闭的