OpenCV - Как определить и измерить угол между двумя кадрами?
Я пытаюсь понять и использовать OpenCV. Я хотел знать, возможно ли найти и измерить угол между двумя кадрами.
Я объясняю: камера исправлена, и рамы могут вращаться вокруг центра и не будут двигаться. На данный момент мне удалось повернуть вручную, и я хотел бы иметь возможность сравнить кадры и вернуть угол. Например:
double getRotation(Image img1, Image img2) {
//Compare the frames
//Return the value
}
и затем я поворачиваюсь под этим углом.
2 ответа
Если вы можете обнаружить статические объекты, например фон, на кадрах, то вы можете найти точки с именем good_features_to_track (cvGoodFeaturesToTrack
) на фоне и отследите эти точки с помощью optical_flow (cvCalcOpticalFlowPyrLK
).
Если вращение происходит только на плоскости xy, вы можете обнаружить вращение, используя cvGetAffineTransform
,
Поскольку допускается только вращение (без перевода и масштабирования), нетрудно определить угол поворота с помощью матрицы преобразования, полученной cvGetAffineTransform
, Эта матрица выглядит так (см. Википедию):
Где \theta - угол поворота
Ну, это может быть очень сложно, просто более простое решение может быть найти грубые линии кадров. Конечно, вам нужно определить, где находятся лучшие и стабильные линии, которые вы можете отслеживать между двумя кадрами, как только это станет доступно, вы сможете найти угол между двумя кадрами. То, что Андрей предложил для нахождения углов, также должно быть полезным.