python逆透视变换试验——利用cv2.getPerspectiveTransform和cv2.warpPerspective函数实现

试验说明

本试验是想模拟自动驾驶识别车道线拟合函数时,可能会用到的一种图像处理手段,即将相机拍摄到的透视图像转换成为逆透视图像(鸟瞰图),便于对车道线的后续处理,同时对基于单目视觉进行测距也有一定的帮助;
在这里插入图片描述

生成透视变换矩阵;进行透视变换

cv2.getPerspectiveTransform(src, dst) → retval

获取逆透视变换矩阵函数各参数含义 ;
src:源图像中待测矩形的四点坐标;
sdt:目标图像中矩形的四点坐标

逆透视变换函数各参数含义

cv2.warpPerspective(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst

src:输入图像;
M:变换矩阵;
dsize:目标图像shape;
flags:插值方式,interpolation方法INTER_LINEAR或INTER_NEAREST;
borderMode:边界补偿方式,BORDER_CONSTANT or BORDER_REPLICATE;
borderValue:边界补偿大小,常值,默认为0

如果只是简单地将图像进行变换可以直接选取原图中呈现透视效果的4个点坐标,然后再按照自己的目的将这4个点构成的梯形转换成矩形形式,不过,这样的操作由于选取点坐标具有随机性,带来的误差较大。
例如,我们直接选取棋盘格的四个角点作为透视效果中的4个点,左上:(414,471),右上:(920,471),右下:(1015,756),左下:(330,756);计算出梯形上下边的像素长度为:506 和 685,高为 285;
因此我们可以设计一个矩形作为逆透视变换后的图像大小尺寸,即 cv2.warpPerspective中的dsize,取685*285,效果如下:
在这里插入图片描述
在这里插入图片描述

进一步,为了尽可能的包含整个图像,我们可以通过相机标定的方式,提前计算出整个图像

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
cv2.getPerspectiveTransform() 是 OpenCV 中的一个函数,用于计算透视变换矩阵,即从一个四边形到另一个四边形的映射关系。在计算机视觉中,透视变换可以将图像从一个视角转换到另一个视角,或者校正图像的畸变。 该函数需要输入源四边形和目标四边形的四个点的坐标,然后计算得到一个 3x3 的变换矩阵。这个变换矩阵可以传递给 cv2.warpPerspective() 函数,将源图像进行透视变换,得到目标图像。 下面是一个简单的示例代码: ```python import cv2 import numpy as np # 定义源四边形和目标四边形的四个点坐标 src_points = np.float32([[141, 131], [480, 159], [493, 630], [64, 601]]) dst_points = np.float32([[0, 0], [640, 0], [640, 480], [0, 480]]) # 计算透视变换矩阵 M = cv2.getPerspectiveTransform(src_points, dst_points) # 加载源图像并进行透视变换 img = cv2.imread('source.jpg') dst = cv2.warpPerspective(img, M, (640, 480)) # 显示源图像和目标图像 cv2.imshow('source', img) cv2.imshow('destination', dst) cv2.waitKey(0) cv2.destroyAllWindows() ``` 上面的代码中,我们定义了源四边形和目标四边形的四个点坐标,然后使用 cv2.getPerspectiveTransform() 计算得到透视变换矩阵 M。接着,我们加载源图像,使用 cv2.warpPerspective() 函数将其进行透视变换,得到目标图像 dst。最后,我们将源图像和目标图像都显示出来。 需要注意的是,透视变换需要确保源四边形和目标四边形的四个点是按照特定顺序输入的,否则可能会出现意想不到的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sjh_sjh_sjh

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

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

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

打赏作者

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

抵扣说明:

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

余额充值