代码编织梦想

目录

根据4个点确定投影变换关系:

驾驶模拟左拐右拐 平移

四个点选


根据4个点确定投影变换关系:

import cv2
import numpy as np

def apply_perspective_transform(image, src_points, dst_points):
    # 将选择的点转换为浮点数数组
    pts1 = np.float32(src_points)
    pts2 = np.float32(dst_points)

    # 计算透视变换矩阵
    perspective_matrix = cv2.getPerspectiveTransform(pts1, pts2)

    # 应用透视变换
    result = cv2.warpPerspective(image, perspective_matrix, (image.shape[1], image.shape[0]))

    return result

# 加载图像
image = cv2.imread(r'0831_1825_12.jpg')

# 定义源点和目标点(可以自行修改这些点的坐标)
src_points = [(614,251), (615,385), (821,388), (821,249)]  # 示例:原始图像的四个顶点
dst_points =[(614+100,251), (615+100,385-20), (821+110,388-20), (821+110,249)]  # 示例:原始图像的四个顶点

# 应用透视变换
result=apply_perspective_transform(image, src_points, dst_points)

cv2.imshow("image", image)
cv2.imshow("Transformed Image", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

驾驶模拟左拐右拐 平移

import random

import cv2
import numpy as np




def toushi(turn_right,step):
    rows, cols = image.shape[:2]

    # 定义原图像中的四个角点
    pts1 = np.float32([[0, 0], [cols, 0], [0, rows], [cols, rows]])
    angle_x=4

    np.random.uniform(-angle_x, angle_x)
    scale= step*10+angle_x

        # 定义变换后的四个点,模拟左转并保持车辆近似垂直向上
        # 将左侧点向右偏移,右侧点向左偏移,模拟车辆左转
        # 同时保持车辆近似垂直向上

    if turn_right:
        offset_x_left = -scale  # 左侧点向右偏移量
        offset_x_right = scale  # 右侧点向左偏移量
    else:
        offset_x_left = scale  # 左侧点向右偏移量
        offset_x_right = -scale  # 右侧点向左偏移量
    offset_y = 0  # 垂直偏移量

    pts2 = np.float32([
        [offset_x_left, offset_y],                     # 左上角
        [cols - offset_x_right, 0],                    # 右上角
        [offset_x_left, rows - offset_y],              # 左下角
        [cols - offset_x_right, rows]                  # 右下角
    ])

    # 计算透视变换矩阵
    M = cv2.getPerspectiveTransform(pts1, pts2)

    # 应用透视变换
    transformed_image = cv2.warpPerspective(image, M, (cols, rows))
    return transformed_image

if __name__ == '__main__':
    # 读取图像a
    image = cv2.imread(r'B:\project\jijia\lixiang\data_util\imgs\000002\0831_1824_1.jpg')
    image = cv2.imread(r'B:\project\jijia\lixiang\data_util\imgs\000002\0831_1825_12.jpg')
    # 图像的尺寸
    # 图像的尺寸

    while True:

        turn_right = random.choice([0, 1])


        for step in range(1,12):
            print(turn_right,step)
            transformed_image=toushi(turn_right, step)
            # 显示原图和变换后的图像
            cv2.imshow('Original Image', image)
            cv2.imshow('Transformed Image', transformed_image)

            cv2.waitKey(0)
            cv2.destroyAllWindows()

四个点选

import cv2
import numpy as np

# 初始化全局变量
points = []


# 定义鼠标回调函数,用于记录用户点击的点
def select_points(event, x, y, flags, param):
    global points
    if event == cv2.EVENT_LBUTTONDOWN:
        points.append((x, y))
        cv2.circle(image, (x, y), 5, (0, 255, 0), -1)
        cv2.imshow("Original Image", image)
        if len(points) == 4:
            sorted_points = sort_points_clockwise(points)
            apply_perspective_transform(sorted_points)


# 将点按顺时针顺序排序的函数
def sort_points_clockwise(pts):
    # 将点转换为NumPy数组
    pts = np.array(pts)

    # 计算中心点
    center = np.mean(pts, axis=0)

    # 计算点相对于中心点的角度
    angles = np.arctan2(pts[:, 1] - center[1], pts[:, 0] - center[0])

    # 按照角度排序,逆时针顺序,所以使用负号将其变为顺时针排序
    sorted_pts = pts[np.argsort(angles)]

    return sorted_pts


# 应用透视变换的函数
def apply_perspective_transform(sorted_points):
    # 定义目标图像的四个顶点
    width, height = image.shape[1], image.shape[0]
    pts1 = np.float32(sorted_points)
    print(pts1)
    # 目标点矩阵, 我们选择目标图像的四个角落作为目标点
    pts2 = np.float32([[0, 0], [width, 0], [width, height], [0, height]])

    # 计算透视变换矩阵
    perspective_matrix = cv2.getPerspectiveTransform(pts1, pts2)

    # 应用透视变换
    result = cv2.warpPerspective(image_copy, perspective_matrix, (width, height))

    # 显示结果
    cv2.imshow("Transformed Image", result)


# 加载图像
image = cv2.imread(r'B:\project\jijia\lixiang\data_util\imgs\000002\0831_1825_12.jpg')
height, width = image.shape[:2]
center_x = width // 2
cv2.line(image, (center_x, 0), (center_x, height), (255, 0, 0), 2)  # 蓝色垂直线
image_copy = image.copy()

# 在图像中绘制一条垂直线


# 创建窗口并设置鼠标回调函数
cv2.imshow("Original Image", image)
cv2.setMouseCallback("Original Image", select_points)

print("请点击图像中的四个点来选择透视变换的区域,按ESC键退出。")

# 主循环
while True:
    key = cv2.waitKey(1) & 0xFF
    if key == 27:  # 按ESC键退出
        break
    elif key == ord('r'):  # 按'r'键重置选择
        points = []
        image = image_copy.copy()
        cv2.line(image, (center_x, 0), (center_x, height), (255, 0, 0), 2)  # 重绘垂直线
        cv2.imshow("Original Image", image)

cv2.destroyAllWindows()

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/jacke121/article/details/141756641

实战端到端深度学习模拟无人驾驶_pengdali的博客-爱代码爱编程_端到端无人驾驶

一、理论知识 参考NVIDIA的论文 https://arxiv.org/pdf/1604.07316.pdf 这个实验的目的是使用卷积神经网络(CNN)将从前向摄像机得到的原始图像映射成自动驾驶汽车的驾驶命令。 这个过程需要先采集数据,原理是这样的: 一共有左、中、右3个摄像头,负责采集视频数据。在训练后我们只需要中间的摄像头采集的数据用

无人驾驶系统安全_csdn_csdn__ai的博客-爱代码爱编程

作者:刘少山,李文超,唐洁 责编:何永灿,欢迎人工智能领域技术投稿、约稿、给文章纠错,请发送邮件至heyc@csdn.net 本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅2017年《程序员》 目前

无人驾驶中的决策规划控制技术_csdn_csdn__ai的博客-爱代码爱编程_规划控制

作者: 李力耘,刘少山 责编:何永灿,欢迎人工智能领域技术投稿、约稿、给文章纠错,请发送邮件至heyc@csdn.net 本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅《程序员》 无人车作为一个复杂

opencv findcontours函数参数_ai视觉网奇的博客-爱代码爱编程_cv2.findcontours参数

目录 OpenCV findContours函数参数 python检测外轮廓: c++轮廓检测: 一、mode取值“CV_RETR_EXTERNAL”,method取值“CV_CHAIN_APPROX_NONE”,即只检测最外层轮廓,并且保存轮廓上所有点: 二、 mode取值“CV_RETR_LIST”,method取值“CV_CHAIN_APP

Opencv C++ 归一化-爱代码爱编程

  c++默认是uint8,uchar类型,归一化需要数据转换,在3.4.8版本下,没有试验成功 在3.4.8版本下,先转换类型,再进行除法操作,也没试验成功。 这个可以:文章后面有3通道分别归一化: Mat img = cv::imread("bar1.jpg"); img.convertTo(img, CV_32FC1); normal

STM32f4日记8之四轮三路寻迹小车实验(小车实验二:红外模块检测寻迹(左拐,右拐,前进,停止))-爱代码爱编程

STM32f4日记8之四轮三路寻迹小车实验(小车实验二:红外模块检测寻迹(左拐,右拐,前进,停止)) 板子:stm32f407zgt6正点原子迷你版作者:shawn 2021.2.14(大年初三) 19:04 All rights reserved //如果你觉得对你有帮助,请点赞同,这对我很重要,谢谢。 //一、硬件介绍基本结构:上下两层小车底盘,四个

【自动驾驶行为决策研究趋势 】-爱代码爱编程

1.1驾驶行为决策 定义: 决策是指根据给定的感知模块解析出的环境信息(无人车位置、速度、朝向、所处车道、距离无人车一定距离内的障碍物与交通标志信息),通过行为决策层决定无人车行驶策略,控制汽车的行为到达驾驶目标。驾驶行为规划也称为驾驶行为决策,行为规划层处于无人车规划模块中间,位于上层的任务规划层和底层的动作规划层中间。 作用: 驾驶行为决策层的

02_两小时了解自动驾驶-爱代码爱编程

02_两小时了解自动驾驶 目标你将学到什么什么是无人驾驶无人驾驶的运作方式参考车辆与硬件平台开源软件架构仿真环境地图简介高精地图与传统地图地图与定位,感知,规划的关系高精地图定位简介GNSS RTK惯性导航激光雷达定位视觉定位融合定位感知简介计算机视觉摄像头图像Lidar图像机器学习神经网络反向传播算法卷积神经网络(CNN)检测与分类跟踪分割apo