OpencvのminArearectで回転角度の計算


  • pos.x,pos.yがminArearect()で得た4点から計算した重心の座標
  • marker.x,marker.yがマーカーの位置座標
  • マーカーは縦長の長方形の左上に置く仮定
  • angleはminArearect()で計算した角度 -90°
        let cx = pos.x
        let cy = pos.y
        let mx = marker.x
        let my = marker.y

        let dx = mx - cx
        let dy = my - cy

        let newAngle 
        let pattern
        if(robot.size.width < robot.size.height){
          if(angle>=-45){
            if(dy<0){
              pattern = 1
              newAngle = Math.abs(angle)
            } else {
              pattern = 5
              newAngle = Math.abs(angle) + 180
            }
          } else {
            if(dx<0){
              pattern = 2
              newAngle = Math.abs(angle)
            } else {
              pattern = 6
              newAngle = Math.abs(angle) + 180
            }
          }
        } else {
          if(angle>=-45){
            if(dy>0){
              pattern = 3
              newAngle = Math.abs(angle) + 90
            } else {
              pattern = 7
              newAngle = Math.abs(angle) + 270
            }
          } else {
            if(dy>0){
              pattern = 4
              newAngle = Math.abs(angle) + 90
            } else {
              pattern = 8
              newAngle = Math.abs(angle) + 270
            }
          }
        }