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)

