画像があり、画像に長方形を配置します。次に、画像を回転させます。回転した画像の長方形の中心を取得するにはどうすればよいですか?
または、何らかの形で長方形を回転させて、回転した画像を表示できますか? この場合、画像の回転に使用されるポイントと同じポイントに沿って回転を行う必要があると思います。
その上に長方形を置いた画像です。
回転した画像です。
画像を回転させるために使用するコードは次のとおりです。
cv::Mat frame, frameRotated;
frame = cv::imread("lena.png");
cv::Rect rect(225,250,150,150);
cv::rectangle(frame, rect, cv::Scalar(0,0,255),2);
int theta = 30;
double radians = theta * PI / 180.0;
double sin = abs(std::sin(radians));
double cos = abs(std::cos(radians));
int newWidth = (int) (frame.cols * cos + frame.rows * sin);
int newHeight = (int) (frame.cols * sin + frame.rows * cos);
cv::Mat targetMat(cv::Size(newWidth, newHeight), frame.type());
int offsetX = (newWidth - frame.cols) / 2;
int offsetY = (newHeight - frame.rows) / 2;
frame.copyTo(targetMat.rowRange(offsetY, offsetY + frame.rows).colRange(offsetX, offsetX + frame.cols));
cv::Point2f src_center(targetMat.cols/2.0F, targetMat.rows/2.0F);
cv::Mat rot_mat = cv::getRotationMatrix2D(src_center, theta, 1.0);
cv::warpAffine(targetMat, frameRotated, rot_mat, targetMat.size());
imshow("frame", frame);
imshow("rotated frame", frameRotated);
編集
回転した画像に点があるとします。回転行列を使用して元の画像に対応する点を取得するにはどうすればよいですか?