Files
AVM360/surround_view/param_settings.py
2026-04-01 14:11:47 +08:00

119 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import os
import cv2
camera_names = ["front", "back", "left", "right"]
# --------------------------------------------------------------------
# (shift_width, shift_height): 鸟瞰图在水平和垂直方向上超出标定图案的距离
shift_w = 100
shift_h = 100
# 标定图案与车辆之间在水平和垂直方向上的间隙大小
inn_shift_w = 8
inn_shift_h = 30
# 拼接图像的总宽度/高度
total_w = 260 + 2 * shift_w
total_h = 350 + 2 * shift_h
# 计算车辆在全景图中的位置
xl = shift_w + 55 + inn_shift_w
xr = total_w - xl
print(xl, xr)
yt = shift_h + 55 + inn_shift_h
yb = total_h - yt
# --------------------------------------------------------------------
project_shapes = {
"front": (total_w, yt),
"back": (total_w, yt),
"left": (total_h, xl),
"right": (total_h, xl)
}
# 要选取的四个像素点的位置。
# 运行 get_projection_map.py 脚本时,必须按相同顺序点击这些像素点。
project_keypoints = {
"front": [(shift_w + 0, shift_h),
(shift_w + 260, shift_h),
(shift_w + 0, shift_h + 100),
(shift_w + 260, shift_h + 100)],
"back": [(shift_w + 0, shift_h),
(shift_w + 260, shift_h),
(shift_w + 0, shift_h + 80),
(shift_w + 260, shift_h + 80)],
"left": [(shift_h + 60, shift_w),
(shift_h + 300, shift_w),
(shift_h + 60, shift_w + 50),
(shift_h + 300, shift_w + 50)],
"right": [(shift_h + 80, shift_w),
(shift_h + 350, shift_w),
(shift_h + 80, shift_w + 50),
(shift_h + 350, shift_w + 50)]
}
# car_image = cv2.imread(os.path.join(os.getcwd(), "images", "car.png"))
# car_image = cv2.resize(car_image, (xr - xl, yb - yt))
# 放大系数调整这个值控制车辆图大小1.0 = 原始大小1.3 = 放大30%
CAR_SCALE = 1.3
car_w = xr - xl
car_h = yb - yt
# 放大后的车辆图尺寸
car_display_w = int(car_w * CAR_SCALE)
car_display_h = int(car_h * CAR_SCALE)
# 放大后车辆图在全景图中的起始坐标(居中对齐)
car_x = xl - (car_display_w - car_w) // 2
car_y = yt - (car_display_h - car_h) // 2
def _make_car_image_rgba(path, w, h, tolerance=30):
# 用 IMREAD_UNCHANGED 保留 PNG 透明通道
img = cv2.imread(path, cv2.IMREAD_UNCHANGED)
if img is None:
return np.zeros((h, w, 4), np.uint8)
img = cv2.resize(img, (w, h))
# 如果图片有 alpha 通道,直接用
if img.shape[2] == 4:
rgba = img.copy()
else:
# 没有 alpha 通道,白色转透明
rgba = cv2.cvtColor(img, cv2.COLOR_BGR2BGRA)
white_mask = (
(rgba[:, :, 0] >= 255 - tolerance) &
(rgba[:, :, 1] >= 255 - tolerance) &
(rgba[:, :, 2] >= 255 - tolerance)
)
rgba[white_mask, 3] = 0
# 边缘平滑
alpha = rgba[:, :, 3].astype(np.uint8)
alpha = cv2.GaussianBlur(alpha, (5, 5), 0)
rgba[:, :, 3] = alpha
return rgba
import numpy as np
car_image_path = os.path.join(os.getcwd(), "images", "car.png")
# 原始尺寸(保持兼容)
car_image = cv2.imread(car_image_path)
if car_image is not None:
car_image = cv2.resize(car_image, (car_w, car_h))
# 放大版带透明通道
car_image_rgba = _make_car_image_rgba(car_image_path, car_display_w, car_display_h)