import cv2 import os import time import sys # 添加项目根目录到系统路径 sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from utils.detect_dual_track_lines import detect_center_based_dual_track_lines, detect_dual_track_lines # 指定要测试的图像 image_path = 'logs/image/dual_track_orig_20250528_160758_887412.jpg' # 读取原始图像 orig_img = cv2.imread(image_path) if orig_img is None: print(f"无法读取图像: {image_path}") exit(1) # 获取图像尺寸 height, width = orig_img.shape[:2] result_img = orig_img.copy() # 绘制图像中心线 center_x = width // 2 cv2.line(result_img, (center_x, 0), (center_x, height), (255, 255, 255), 1) print("使用中心线基础方法检测...") center_result = detect_center_based_dual_track_lines(image_path, observe=False, save_log=True) print("使用传统方法检测...") traditional_result = detect_dual_track_lines(image_path, observe=False, save_log=True, stone_path_mode=False) # 在结果图像上绘制中心线方法的结果 if center_result[0] is not None: print("中心线基础检测成功!") center_info, left_info, right_info = center_result # 绘制中心线基础检测结果 - 使用绿色 cv2.line(result_img, (int(left_info["line"][0]), int(left_info["line"][1])), (int(left_info["line"][2]), int(left_info["line"][3])), (0, 255, 0), 2) cv2.line(result_img, (int(right_info["line"][0]), int(right_info["line"][1])), (int(right_info["line"][2]), int(right_info["line"][3])), (0, 255, 0), 2) # 添加标签 cv2.putText(result_img, "Center-based", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) # 显示详细信息 print(f"中心线方法 - 左轨迹线x中点: {left_info['x_mid']:.1f}, 右轨迹线x中点: {right_info['x_mid']:.1f}") print(f"中心线方法 - 轨道宽度: {right_info['x_mid'] - left_info['x_mid']:.1f}") print(f"中心线方法 - 中心点: {center_info['point']}, 偏差: {center_info['deviation']:.1f}") else: print("中心线基础检测失败!") # 在结果图像上绘制传统方法的结果 if traditional_result[0] is not None: print("传统方法检测成功!") trad_center_info, trad_left_info, trad_right_info = traditional_result # 绘制传统方法检测结果 - 使用蓝色/红色 cv2.line(result_img, (int(trad_left_info["line"][0]), int(trad_left_info["line"][1])), (int(trad_left_info["line"][2]), int(trad_left_info["line"][3])), (255, 0, 0), 2) cv2.line(result_img, (int(trad_right_info["line"][0]), int(trad_right_info["line"][1])), (int(trad_right_info["line"][2]), int(trad_right_info["line"][3])), (0, 0, 255), 2) # 添加标签 cv2.putText(result_img, "Traditional", (10, 70), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 255), 2) # 显示详细信息 print(f"传统方法 - 左轨迹线x中点: {trad_left_info['x_mid']:.1f}, 右轨迹线x中点: {trad_right_info['x_mid']:.1f}") print(f"传统方法 - 轨道宽度: {trad_right_info['x_mid'] - trad_left_info['x_mid']:.1f}") print(f"传统方法 - 中心点: {trad_center_info['point']}, 偏差: {trad_center_info['deviation']:.1f}") else: print("传统方法检测失败!") # 保存结果图像 timestamp = time.strftime("%Y%m%d_%H%M%S") result_path = f"logs/image/specific_comparison_{timestamp}.jpg" cv2.imwrite(result_path, result_img) print(f"\n比较结果已保存到: {result_path}") print("绿色线表示中心线基础检测方法,蓝色/红色线表示传统方法。")