#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;
}