Я меняю изображение с фронтальной перспективы на вид глазами, используя getHomography и warpPerspective.
Это работает в том, что изображение искажается до желаемой перспективы, но кадрирование отключено. Он перемещает искаженное изображение в значительной степени за пределы поля изображения. Я предполагаю, что причина в том, что операция приводит к отрицательным координатам.
Я рассчитал точки для расчета матрицы перевода вручную, а не с помощью каких-либо функций opencv: s для этого, поскольку, например, функции шахматной доски не смогли определить правильные точки.
Я думаю, это можно исправить, внеся дополнительные изменения в матрицу преобразования. Но как это делается? Кроме того, есть ли способ убедиться, что преобразованное изображение центрировано по оси X, а затем позволить оси Y отрегулировать желаемое положение?
Фрагмент кода, который выполняет эту работу сейчас:
cv::Mat image; // image is loaded with the original image
cv::Mat warpPers; // The container for the resulting image
cv::Mat H;
std::vector<cv::Point2f> src;
std::vector<cv::Point2f> dst;
// In reality several more points.
src.push_back(cv::Point2f(264,301));
src.push_back(cv::Point2f(434,301));
src.push_back(cv::Point2f(243,356));
src.push_back(cv::Point2f(476,356));
dst.push_back(cv::Point2f(243,123));
dst.push_back(cv::Point2f(476,123));
dst.push_back(cv::Point2f(243,356));
dst.push_back(cv::Point2f(476,356));
H = cv::findHomography(src, dst, CV_RANSAC);
cv::warpPerspective(image,
newPers,
H,
cv::Size(3000,3000),
cv::INTER_NEAREST | CV_WARP_FILL_OUTLIERS
);
cv::namedWindow("Warped persp", cv::WINDOW_AUTOSIZE );
cv::imshow( "Warped persp", newPers);
cv::Point2f(0,0)``cv::Point2f(image.cols, 0)``cv::Point2f(image.cols, image.rows)
cv::Point2f(0, image.rows)
вручную (множественно играть с вашей гомографией) и проверить, соответствуют ли они вашему dst-изображению размером 3000,3000. Вычислите их минимальное/максимальное местоположение и соответствующим образом измените часть перевода вашей гомографии и/или масштаб (или размер изображения dst). Однако я не проверял, в порядке ли остальная часть вашего кода;) - person Micka   schedule 06.03.2014findHomography
выполняла свою работу, вы должны тщательно определить точки назначения, чтобы искаженное изображение соответствовало тому, что вам нужно. Однако априори нет ничего плохого в составлении омографии с пользовательским переводом (полученным, как сказал Мика) перед деформацией изображения. - person BConic   schedule 06.03.2014