欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > Python----计算机视觉处理(Opencv:道路检测之道路透视变换)

Python----计算机视觉处理(Opencv:道路检测之道路透视变换)

2025/9/18 10:01:56 来源:https://blog.csdn.net/weixin_64110589/article/details/146255771  浏览:    关键词:Python----计算机视觉处理(Opencv:道路检测之道路透视变换)

一、透视变换

        对于道路检测来说,为了方便车辆进行行驶,道路上都有车道线,为了更加方便对道路线进行检测,首先我们要把到路线平视图转变为俯视图,以便后期处理更加方便,如下图所示,该为虚拟场景的驾驶车辆第一人称图。

我们要把这张图片装变为第三人称视角的俯瞰图,如下图所示 

二、操作方式

   

导入模块

import cv2
import numpy as np

输入图像

img=cv2.imread('15.png')

 绘出透视变换线

height,width,_=img.shape
cv2.line(img,(width//2-75,height//2),(0,height),(0,0,255),2)
cv2.line(img,(width//2+

 透视变换矩阵

src=np.float32([[width//2-75,height//2],[width//2+100,height//2],[0,height],[width,height]]
)
dst=np.float32([[0,0],[width,0],[0,height],[width,height]]
)
M=cv2.getPerspectiveTransform(src,dst)

 进行透视变换

img_wrp=cv2.warpPerspective(img,M,(width,height),flags=cv2.INTER_LINEAR)

 输出图像

cv2.imshow('img',img)
cv2.imshow('img_wrp',img_wrp)
cv2.waitKey(0)

 完整代码

import cv2       
import numpy as np  img = cv2.imread('15.png')  # 获取图像的高度和宽度  
height, width, _ = img.shape  # 在图像中心绘制一条红色直线,起点为 (width//2-75, height//2),终点为 (0, height)  
cv2.line(img, (width // 2 - 75, height // 2), (0, height), (0, 0, 255), 2)  # 在图像中心绘制另一条红色直线,起点为 (width//2+100, height//2),终点为 (width, height)  
cv2.line(img, (width // 2 + 100, height // 2), (width, height), (0, 0, 255), 2)  # 定义源点坐标,进行透视变换的起始位置  
src = np.float32(  [  [width // 2 - 75, height // 2],  # 线段起点  [width // 2 + 100, height // 2],  # 线段终点  [0, height],                        # 左下角坐标  [width, height]                     # 右下角坐标  ]  
)  # 定义目标点坐标,透视变换后的目标位置  
dst = np.float32(  [  [0, 0],        # 目标左上角点  [width, 0],    # 目标右上角点  [0, height],   # 目标左下角点  [width, height] # 目标右下角点  ]  
)  # 计算透视变换矩阵 M  
M = cv2.getPerspectiveTransform(src, dst)  # 应用透视变换,生成新图像 img_wrp  
img_wrp = cv2.warpPerspective(img, M, (width, height), flags=cv2.INTER_LINEAR)  # 显示原图和透视变换后的图像  
cv2.imshow('img', img)       
cv2.imshow('img_wrp', img_wrp)   # 等待按键后关闭窗口  
cv2.waitKey(0)                 

三、库函数

3.1、line()

cv.line(	img, pt1, pt2, color[, thickness[, lineType[, shift]]]	) ->	IMG
方法描述
img该图像
pt1线段的第一个点
pt2线段的第二个点
color线条颜色
thickness线条粗细
lineType线路的类型。请参见 LineTypes
shift点坐标中的小数位数

3.2、getPerspectiveTransform()

cv.getPerspectiveTransform(	src, dst[, solveMethod]	) ->	retval
方法描述
src源图像中四边形顶点的坐标。
dst目标图像中相应四边形顶点的坐标。
solveMethod传递给 cv::solve 的方法 (DecompTypes)

3.3、warpPerspective()

cv.warpPerspective(	src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]	) ->	DST
方法描述
src输入图像
dst输出图像,其大小为 dsize 且类型与 src 相同
M3*3变换矩阵
dsize输出图像的大小
flags插值方法(INTER_LINEAR 或 INTER_NEAREST)和可选标志 WARP_INVERSE_MAP 的组合,将 M 设置为逆变换
borderMode像素外插法(BORDER_CONSTANT 或 BORDER_REPLICATE)。
borderValue在恒定边界的情况下使用的值;默认情况下,它等于 0

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词