-
筛选高亮区域
首先使用了自适应二值化,但将 block size 在 200 以内调节,都未得到满意的图像,故更换为非自适应的函数,有所改观。最终阈值选取在一半左右。
-
图片中灯条区域过曝,难以使用蓝色灯光这一信息。
由于真实情况使用工业相机,曝光可调,故可将代码中的
HSV_range内容更改为真实灯光的蓝色。一方面可减少场内其他光源干扰,另一方面可以提高识别精度。本任务中,由于灯光中蓝色并不明显,故若转为灰度图再二值化,将可能更难精确分辨。故直接使用筛子mask筛出白色(灯光内部)和蓝色(灯光周围),得到与二值化效果相同的图像。 -
图片中存在另一处高亮区域,干扰灯条筛选。
引入“bounding box 填充度”变量,其值等于高亮面积除以 bounding box 面积。小于一半则认为此处高亮与通常灯光形状较为不同,剔除之。
-
在得到较为理想的结果后,试去除高斯模糊环节,对结果没有影响。
本任务中识别灯条主要靠灯条的与众不同的颜色和形状,而与画面中的噪点关系不大(最后都被面积、形状筛除)。
-
识别的可能改进:
图片中灯光还有内部为白色、周边为蓝色这一信息。对这类曝光不理想的图像中的灯条可以考虑蓝色+白色和仅白色分别筛取,套叠者即为目标灯条。
src/main_1.cpp: Source code of Task 1.src/main_2.cpp: Source code of Task 2.resources/output_1/*.png: Output images of Task 1.resources/output_2/*.png: Output images of Task 2.
-
resources/Screenshot 2025-09-21 232450.png: 任务1、任务2程序运行时终端的输出截图。如下: -
resources/output_1/feature_red_area.png为任务1红色区域图像;resources/output_1/feature_red_mask.png为红色区域的0-1矩阵图像。其余结果可由文件名得知。 -
resources/output_2/bounding_box_light_and_digit_original.png为任务2包含灯条和数字 bounding box 的图像;resources/output_2/bounding_box_original.png为仅框选灯条的图像。
-
图像颜色空间转换
- 转化为灰度图
- 转化为HSV图片
-
应用各种滤波操作
- 应用均值滤波
- 应用高斯滤波
-
特征提取
-
提取红色颜色区域
- HSV方法
-
寻找图像中红色的外轮廓
-
寻找图像中红色的 bounding box
-
计算轮廓的面积
-
提取高亮颜色区域并进行图形学处理
-
灰度化
-
二值化
-
膨胀
-
腐蚀
-
对处理后的图像进行漫水处理
-
-
-
图像绘制
- 绘制任意圆形方形和文字
- 绘制红色的外轮廓
- 绘制红色的 bounding box
-
对图像进行处理
- 图像旋转35度。
- 图像裁剪为原图的左上⻆1/4。
