当前位置: 首页 > news >正文

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

相关文章:

  • 蓝桥杯2023年第十四届省赛真题-棋盘
  • stack与queue和deque
  • Unicode统一码及实现方式的全面讲解
  • fbx bip互转 测试OK
  • 容器 = 命名空间 + Cgroups + 文件系统
  • ISIS协议中的数据库同步
  • Ubuntu完整复制其他用户的anaconda及虚拟环境
  • 【工具】Json在线解析工具
  • 【Android Studio】配置教程以及解决过程中的问题(详细版本)
  • Hive(4.3)Hive基础查询完全指南:从SELECT到复杂查询的10大核心技巧
  • 【教学类-102-01】自制剪纸图案(留白边、沿线剪)01
  • 蓝桥23省赛——接龙数列
  • Spring Boot 实现文件秒传功能
  • 小程序28-事件传参-data-*自定义数据
  • 自然语言处理(25:(终章Attention 1.)Attention的结构​)
  • Prometheus operator怎么添加targets和告警规则
  • 模拟实现线程池
  • 快速排序求第k小的数
  • C-RAN(Cloud-Radio Access Network,云化无线接入网)
  • Moo0 VideoResizer,简单高效压缩视频!
  • 漯河百度做网站电话/百度关键词排名点
  • 电脑上做免费网站教程/遵义网站seo
  • 网站哪家做的好/外链生成器
  • 网站规划与建设需求分析/台州百度推广优化
  • wap微信网站模板/分类达人介绍
  • 制作网站作业/搜索引擎优化自然排名