import numpy as np import matplotlib.pyplot as plt import calc_way import get_data import calc_slope_line import cv2 import model model = model.Model() alpha = model.alpha beta = model.beta img_path = r'C:\Users\Administrator\Desktop\BYD\20250520\frame__9600_2_yolo.jpg' txt_name = "C:\\Users\\Administrator\\Desktop\\BYD\\20250520\\frame_9600_2.jpg_zuobiao.txt" output_image = "9600_2.jpg" x_bot, y_bot, x_top, y_top = get_data.get_data(txt_name) x_bot = np.array(x_bot) y_bot = np.array(y_bot) x_top = np.array(x_top) y_top = np.array(y_top) slope_top, intercept_top ,r2 = calc_slope_line.linear_regression(x_top,y_top) x_zero, y_zero = calc_way.calc_zeros() x_zero = np.array(x_zero) y_zero = np.array(y_zero) slope_zero, intercept_zero,r2_zero = calc_slope_line.linear_regression(x_zero,y_zero) # 绘制原始数据 plt.scatter(x_zero,y_zero, color='blue', label='orgin') # 绘制拟合线 y_pred = slope_zero * x_zero + intercept_zero plt.plot(x_zero, y_pred, color='red', label='fix') plt.xlabel('X') plt.ylabel('Y') plt.legend() plt.show() # # 绘制原始数据 # plt.scatter(x_top,y_top, color='blue', label='orgin') # # # 绘制拟合线 # y_pred = slope_top * x_top + intercept_top # plt.plot(x_top, y_pred, color='red', label='fix') # # plt.xlabel('X') # plt.ylabel('Y') # plt.legend() # plt.show() # 1. 读取图像(替换为你的图片路径) image = cv2.imread(img_path) # 默认读取BGR格式 # 检查图像是否成功加载 if image is None: print("Error: 无法读取图像,请检查路径!") exit() point1 = (int(x_zero[0]), int(960-y_zero[0])) point2 = (int(x_zero[-1]), int(960-y_zero[-1])) cv2.line(image, point1, point2, (0, 255, 0), 1) Z = 0 for i in range(len(x_bot)): k = calc_slope_line.get_k(alpha,beta,x_bot[i],y_bot[i]) print(f"第{i+1}个点的斜率为:{k}") b = calc_slope_line.get_b(x_bot[i],y_bot[i],k) print(f"第{i+1}个点的截距为:{b}") x = (intercept_top - b) / (k - slope_top) y = k * x + b print(f"第{i+1}个点的坐标为为:{x_bot[i],y_bot[i]}") print(f"第{i+1}个点对应的上沿点为:{x,y}") Zw = calc_way.calc_height(x_bot[i],y_bot[i], x, y, alpha, beta) Xw, Yw = calc_way.calc_distance(x_bot[i],y_bot[i], alpha, beta) print(f"第{i+1}个点的坐标为为:{Xw, Yw }") point1 = (x_bot[i], 960-y_bot[i]) point2 = (int(x), 960-int(y)) cv2.line(image, point1, point2, (0, 255, 0), 1) # text = f"Xw,Yw:{int(Xw),int(Yw)},Zw:{int(Zw)}" # position = (x_bot[i], 960-y_bot[i]) # 文字左下角坐标 (x, y) # font = cv2.FONT_HERSHEY_SIMPLEX # 字体类型 # font_scale = 1 # 字体大小 # color = (0, 255, 255) # 黄色(BGR格式) # thickness = 1 # 文字粗细 # cv2.putText(image, text, position, font, font_scale, color, thickness, cv2.LINE_AA) print("路沿高度", Zw) Z = Z + Zw print(f"平均路沿高度为:{Z/len(x_bot)}") text = f"avg_height:{Z/len(x_bot)}" position = (50, 200) # 文字左下角坐标 (x, y) font = cv2.FONT_HERSHEY_SIMPLEX # 字体类型 font_scale = 1 # 字体大小 color = (0, 255, 255) # 黄色(BGR格式) thickness = 1 # 文字粗细 # 3. 在图像上绘制文字 cv2.putText(image, text, position, font, font_scale, color, thickness, cv2.LINE_AA) cv2.imshow("Image with Line", image) cv2.waitKey(0) # 按任意键关闭窗口 cv2.destroyAllWindows() cv2.imwrite(output_image, image)