【OpenCV】透视变换应用——实现鸟瞰图与贴图

本文详细介绍了如何利用OpenCV库在C++中实现图像的透视变换,包括创建鸟瞰图和图形贴图。通过设置四个控制点,计算坐标映射矩阵并应用warpPerspective函数,实现了从普通图像到鸟瞰图的转换。同时,展示了如何将一张图像贴到另一张图像上,通过选择目标位置并填充黑色避免颜色冲突。整个过程结合了鼠标回调函数,使用户能够交互式地选择变换点。

透视变换是3D转换,透视变换的本质是将图像投影到一个新的视平面;

据此,我们可以使用透视变化来实现鸟瞰图和图形贴图的效果;

一、鸟瞰图

实现前:

 实现效果:

 

1.准备一个空的mat对象 用于保存转换后的图

    Mat image=imread("road.jpg");
    imshow("image",image);
    Mat result=Mat::zeros(500,600,CV_8UC1);
    //存储转换后的图像坐标 按顺时针 左上、右上、右下、左下(可自己定顺序)
    vector<Point2f> obj;
    obj.push_back(Point2f(0,0));
    obj.push_back(Point2f(600,0));
    obj.push_back(Point2f(600,500));
    obj.push_back(Point2f(0,500));

2.在原图窗口里做鼠标操作,通过setMouseCallback鼠标回调函数,获取原图四个坐标

在原图中点击四个点获取四个坐标,顺序与上述1中设置的坐标对应,如果1中是顺时针,按选择坐标时也应该按顺时针操作,并且按照左上、右上、右下、左下顺序;

    //2.在原图窗口里做鼠标操作,通过鼠标回调函数,获取原图四个坐标
    struct imagedata data;
    data.img=image;//将原图传入
    setMouseCallback("image",mouseHundle,&data);//鼠标回调函数
    waitKey(0);//键盘输入 向下执行
    //点击按键之后结束鼠标操作,得到原图四个坐标和转换后的坐标
//用到的结构体和鼠标处理函数
struct imagedata
{
    Mat img;
    vector<Point2f>points;
    //该points是test1原图需要做转换的坐标
    //在test2中是原图转换后的坐标
};

void mouseHundle(int event,int x,int y,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

logani

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值