5.png
#include<opencv2/opencv.hpp> #include<iostream> #include <vector> int main(int argc, char** argv) { cv::Mat src = cv::imread("D:/bb/tu/5.png"); std::vector<cv::Point2f> src_coners(4);//原圖4個點 src_coners[0] = cv::Point2f(27, 185); src_coners[1] = cv::Point2f(346, 56); src_coners[2] = cv::Point2f(216, 512); src_coners[3] = cv::Point2f(488, 457); cv::circle(src, cv::Point2f(27, 185), 3, cv::Scalar(0, 0, 255), 2); //畫圓--標注4個點 cv::circle(src, cv::Point2f(346, 56), 3, cv::Scalar(0, 0, 255), 2); cv::circle(src, cv::Point2f(216, 512), 3, cv::Scalar(0, 0, 255), 2); cv::circle(src, cv::Point2f(488, 457), 3, cv::Scalar(0, 0, 255), 2); std::vector<cv::Point2f> dst_coners(4);//新圖4個點 dst_coners[0] = cv::Point2f(10, 10); dst_coners[1] = cv::Point2f(500, 10); dst_coners[2] = cv::Point2f(10, 500); dst_coners[3] = cv::Point2f(500, 500); cv::Mat warpMatrix = getPerspectiveTransform(src_coners, dst_coners);//計算變換矩陣 cv::Mat dst(src.rows,src.cols, CV_8UC3); warpPerspective(src, dst, warpMatrix, dst.size(), cv::INTER_LINEAR, cv::BORDER_CONSTANT);//密集型透視變換 //參數1:變換前圖像 //參數2:變換后圖像 //參數3:變換矩陣 //參數4:輸出圖像大小 //參數5:參數int flags=INTER_LINEAR:設置插值方式,默認方式為線性插值 cv::namedWindow("原圖"); cv::imshow("原圖", src); cv::imshow("新圖", dst); cv::waitKey(0); return 0; }