OpenCVにおける画像へのホモグラフィー変換の適用
入力画像に対してcv::warpperspectiveTransform()によってホモグラフィー行列を適用したいのですが、
メモリアクセス違反が発生してしまいます。
OpenCV warpperspectiveを参考に色々試してみましたがどうも上手く行きません。
助言をいただけないでしょうか。
cv::Mat src_image = cv::imread("image.png"); // 入力画像
cv::Mat src_corner = cv::Mat(4, 1, CV_32FC2); // 入力画像の四隅
cv::Mat dst_corner = cv::Mat(4, 1, CV_32FC2); // 出力画像の四隅
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 2; ++j) {
src_corner.at<cv::Vec2f>(i*2+j, 0)[0] = src_image.cols * j;
src_corner.at<cv::Vec2f>(i*2+j, 0)[1] = src_image.rows * i;
}
}
// ホモグラフィー行列homographyはあらかじめ適切に計算済み
// 入力画像の四隅の点をホモグラフィー変換
cv::perspectiveTransform(src_corner, dst_corner, homography);
// ホモグラフィー変換によって負の座標を持つ点を補正
cv::Mat h;
cv::Rect br;
{
br = cv::boundingRect(dst_corner);
cv::Mat offset_mat = cv::Mat::eye(3, 3, CV_32FC1);
offset_mat.at<float>(0, 2) -= br.x;
offset_mat.at<float>(1, 2) -= br.y;
h = offset_mat * homography;
}
// ホモグラフィー変換
cv::Mat dst_image;
cv::warpPerspective(src_image, dst_image, h, br.rect);