From 4a38259d253a9ac0891a6dff05bddca031ce365e Mon Sep 17 00:00:00 2001 From: spdis Date: Mon, 29 Jun 2026 17:15:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=91=E9=A9=AC=E7=BA=BF?= =?UTF-8?q?=E5=AD=98=E5=9B=BE=E4=B8=B4=E6=97=B6=E5=8A=9F=E8=83=BD;=20?= =?UTF-8?q?=E6=96=91=E9=A9=AC=E7=BA=BF=E9=98=88=E5=80=BC0.87=E2=86=920.82;?= =?UTF-8?q?=20=E6=90=9C=E7=BA=BF=E5=8A=A0CLAHE=E5=8F=8D=E5=85=89=E5=8E=8B?= =?UTF-8?q?=E5=88=B6+=E6=89=A9=E5=A4=A7=E5=BD=A2=E6=80=81=E5=AD=A6?= =?UTF-8?q?=E6=A0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/camera.cpp | 2 +- src/image_cv.cpp | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/camera.cpp b/src/camera.cpp index 25cf023..84d21cb 100644 --- a/src/camera.cpp +++ b/src/camera.cpp @@ -72,7 +72,7 @@ static constexpr int calc_scale = 2; // g_boxes: 检测结果缓冲区 (最多 16 个框) // g_box_count: 当前帧有效检测框数 // ═══════════════════════════════════════════════════════════ -static float g_thresh[4] = {0.80f, 0.75f, 0.80f, 0.87f}; +static float g_thresh[4] = {0.80f, 0.75f, 0.80f, 0.82f}; static DetectBoxV10 g_boxes[16]; static int g_box_count = 0; diff --git a/src/image_cv.cpp b/src/image_cv.cpp index 3906a58..64b4130 100644 --- a/src/image_cv.cpp +++ b/src/image_cv.cpp @@ -104,7 +104,7 @@ cv::Mat image_binerize(cv::Mat &frame) // ============================================================ cv::Mat find_road(cv::Mat &frame) { - static cv::Mat kernel = cv::getStructuringElement(cv::MORPH_CROSS, cv::Size(2, 2)); + static cv::Mat kernel = cv::getStructuringElement(cv::MORPH_CROSS, cv::Size(3, 3)); cv::morphologyEx(binarizedFrame, morphologyExFrame, cv::MORPH_OPEN, kernel); static cv::Mat mask; @@ -161,6 +161,18 @@ void image_main() cv::resize(raw_frame, resizedFrame, cv::Size(line_tracking_width, line_tracking_height)); + // ── 1.5 CLAHE 亮度归一化 → 压制反光 ──────────── + // 先转 LAB, 对 L 通道做局部直方图均衡, 再转回 BGR + // 作用: 亮斑被压暗, 暗区被提亮, 赛道颜色更均匀 + static cv::Mat labFrame; + static std::vector labCh(3); + static cv::Ptr clahe = cv::createCLAHE(2.0, cv::Size(8, 8)); + cv::cvtColor(resizedFrame, labFrame, cv::COLOR_BGR2Lab); + cv::split(labFrame, labCh); + clahe->apply(labCh[0], labCh[0]); + cv::merge(labCh, labFrame); + cv::cvtColor(labFrame, resizedFrame, cv::COLOR_Lab2BGR); + // ── 2. HSV 双通道 Otsu 二值化 ───────────────────── // 赛道区域 = 白色(255),背景/边界 = 黑色(0) binarizedFrame = image_binerize(resizedFrame);