У меня есть изображение full_image_map
, которое я повернул на определенную angle
, используя следующий код:
Mat rotated_full_map_image;
Point2f src_center(full_map_image.cols/2.0F, full_map_image.rows/2.0F);
Mat rot_mat = getRotationMatrix2D(src_center, angle, 1.0);
warpAffine(full_map_image, rotated_full_map_image, rot_mat, full_map_image.size());
Я также нашел координаты точки на повернутом изображении, используя это:
Point rotated_centre;
Point2f p(some_x,some_y);
rotated_centre.x = rot_mat.at<double>(0,0)*p.x + rot_mat.at<double>(0,1)*p.y + rot_mat.at<double>(0,2);
rotated_centre.y = rot_mat.at<double>(1,0)*p.x + rot_mat.at<double>(1,1)*p.y + rot_mat.at<double>(1,2);
Однако мое исходное изображение full_image_map
намного выше, чем широко.Поэтому, когда я поворачиваю его, скажем, на 90 градусов и указываю размер повернутого изображения равным full_map_image.size()
, большая часть повернутого изображения обрезается, поскольку оно пытается подогнать его только под упомянутый размер.Это похоже на этот ответ .
Мой вопрос: как правильно выполнить это вращение на любой заданный угол и при этом использовать тот же метод, чтобы найти координаты точки на повернутом изображении?Я использую OpenCV с C ++.