cv::GetPerspectiveTransform获取透视变换矩阵
- 用于获取透视变换矩阵。它需要源图像中四个点的坐标和这些点在输出图像中的位置坐标
C++
cv::Mat cv::getPerspectiveTransform(const cv::Point2f* src, const cv::Point2f* dst)
-
参数:
-
src:源图像中四个点的坐标数组。
-
dst:这四个点在输出图像中的位置坐标数组。
-
-
返回值:
- 返回一个3x3的透视变换矩阵。
cv::warpPerspective
C++
void cv::warpPerspective(
cv::InputArray src, // 输入图像
cv::OutputArray dst, // 输出图像
cv::InputArray M, // 3x3 变换矩阵
cv::Size dsize, // 目标图像大小
int flags = cv::INTER_LINEAR, // 插值方法
int borderMode = cv::BORDER_CONSTANT, // 外推方法
const cv::Scalar& borderValue = cv::Scalar() //常量边界时使用
);
例程
C++
#include <opencv2/opencv.hpp>
int main()
{
cv::Point2f srcTriangle[4];
cv::Point2f dstTriangle[4];
// 设置源图像中的四个点坐标
srcTriangle[0] = cv::Point2f(0, 0);
srcTriangle[1] = cv::Point2f(src.cols - 1, 0);
srcTriangle[2] = cv::Point2f(0, src.rows - 1);
srcTriangle[3] = cv::Point2f(src.cols - 1, src.rows - 1);
// 设置输出图像中的四个点坐标
dstTriangle[0] = cv::Point2f(0, 0);
dstTriangle[1] = cv::Point2f(dst.cols - 1, 0);
dstTriangle[2] = cv::Point2f(0, dst.rows - 1);
dstTriangle[3] = cv::Point2f(dst.cols - 1, dst.rows - 1);
// 获取透视变换矩阵
cv::Mat perspectiveTransform = cv::getPerspectiveTransform(srcTriangle, dstTriangle);
// 应用透视变换
cv::warpPerspective(src, dst, perspectiveTransform, dst.size());
return 0;
}