opencv C++透视变换

2024-01-03 16:57:45
#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;
}

文章来源:https://blog.csdn.net/weixin_38241876/article/details/135366263
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。