#include <opencv2/opencv.hpp>
#include <iostream>
int main() {
// 1. 读取图像
cv::Mat image = cv::imread("C:/Users/10623/Pictures/adf4d0d56444414cbeb809f0933b9214.png");
if (image.empty()) {
std::cerr << "无法读取图像!" << std::endl;
return -1;
}
// 2. 定义源点(4个点,定义一个四边形区域)
cv::Point2f srcPoints[4];
srcPoints[0] = cv::Point2f(0, 0); // 左上角
srcPoints[1] = cv::Point2f(image.cols - 1, 0); // 右下角
srcPoints[2] = cv::Point2f(image.cols - 1, image.rows - 1); // 左下角
srcPoints[3] = cv::Point2f(0, image.rows - 1); // 右上角
// 3. 定义目标点(通常与源点相同,但可以更改以进行变换)
cv::Point2f dstPoints[4];
dstPoints[0] = cv::Point2f(image.cols / 2, 0); // 左上角
dstPoints[1] = cv::Point2f(image.cols / 2, image.rows - 1); // 右下角
dstPoints[2] = cv::Point2f(0, image.rows - 1); // 左下角
dstPoints[3] = cv::Point2f(0, 0); // 右上角
// 4. 计算透视变换矩阵(cv::getPerspectiveTransform 和 cv::invertPerspectiveTransform)
cv::Mat transformMatrix = cv::getPerspectiveTransform(srcPoints, dstPoints);
//cv::Mat inverseTransformMatrix = cv::invertPerspectiveTransform(transformMatrix);
// 5. 应用透视变换(cv::warpPerspective)
cv::Mat warpedImage;
cv::warpPerspective(image,warpedImage, transformMatrix, image.size());
// 6. 显示结果图像
cv::imshow("Original Image", image);
cv::imshow("Perspective Warped Image", warpedImage);
cv::waitKey(0);
return 0;
}