93 lines
3.7 KiB
Python
93 lines
3.7 KiB
Python
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("绿色线表示中心线基础检测方法,蓝色/红色线表示传统方法。") |