opencv-warpPerspective密集型透视变换

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;
}
复制代码

 

 

 

 

posted @   天子骄龙  阅读(993)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
历史上的今天:
2020-11-30 photoshop--图层
2020-11-30 Arduino--人体触摸模块
点击右上角即可分享
微信分享提示

目录导航