سلام.
1-محاسبه ماتریس چرخش با توجه به مرکز و زاویه چرخش
2-محاسبه bounding rect تصویر مبدا بعد از چرخش
3-تنظیم ماتریس چرخش جهت شیفت دادن تصویر
4- استفاده تابع cv::wrapAffine جهت اعمال ماتریس چرخش بر روی تصویر ورودی و ارسال نتیجه روی تصویر خروجی
void rotateImage2(cv::InputArray _src, cv::OutputArray _dst, double angle, int flags, const cv::Scalar& back_color)
{
cv::Mat src = _src.getMat();
cv::Point2f center(src.cols / 2.f, src.rows / 2.f);
cv::Mat rot = cv::getRotationMatrix2D(center, angle, 1.0);
cv::Rect bbox = cv::RotatedRect(center, src.size(), (float)angle).boundingRect();
rot.at<double>(0, 2) += bbox.width / 2.0 - center.x;
rot.at<double>(1, 2) += bbox.height / 2.0 - center.y;
cv::warpAffine(src, _dst, rot, bbox.size(), flags, BORDER_CONSTANT, back_color);
}