我通过使用 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);