mi-task/test/test_specific_image.py

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