fix: redownload images matching each experiment theme; fix exp8 light bar detection (2/2 now)
This commit is contained in:
@@ -47,18 +47,15 @@ int main()
|
||||
// 600×450 画布,深灰色背景(模拟比赛场地的昏暗环境)
|
||||
cv::Mat scene(450, 600, CV_8UC3, cv::Scalar(40, 40, 40));
|
||||
|
||||
// 画两个"红色灯条"(模拟 RoboMaster 装甲板上的 LED)
|
||||
// 灯条是竖直的细长矩形,这是我们检测的目标
|
||||
// 左灯条
|
||||
cv::rectangle(scene, cv::Point(200, 120), cv::Point(240, 280),
|
||||
cv::Scalar(0, 0, 255), -1); // 纯红色竖直矩形
|
||||
// 右灯条
|
||||
cv::rectangle(scene, cv::Point(360, 120), cv::Point(400, 280),
|
||||
cv::Scalar(0, 0, 255), -1); // 纯红色竖直矩形
|
||||
|
||||
// 画一个红色"装甲板"(连接两个灯条的中间横梁)
|
||||
cv::rectangle(scene, cv::Point(200, 180), cv::Point(400, 220),
|
||||
cv::Scalar(0, 0, 200), -1); // 稍暗一点的红色
|
||||
// --- 先画背景噪点(必须在灯条之前!否则噪点会覆盖在灯条上)---
|
||||
for (int i = 0; i < 200; i++)
|
||||
{
|
||||
int x = rand() % 600;
|
||||
int y = rand() % 450;
|
||||
uchar noise_color = static_cast<uchar>(rand() % 128 + 60);
|
||||
cv::circle(scene, cv::Point(x, y), 1,
|
||||
cv::Scalar(noise_color, noise_color, noise_color), -1);
|
||||
}
|
||||
|
||||
// 画一些干扰物(场地上可能有其他颜色的物体)
|
||||
cv::circle(scene, cv::Point(100, 100), 30, cv::Scalar(255, 0, 0), -1); // 蓝色干扰圆
|
||||
@@ -66,16 +63,20 @@ int main()
|
||||
cv::Scalar(0, 255, 0), -1); // 绿色干扰矩形
|
||||
cv::circle(scene, cv::Point(80, 350), 40, cv::Scalar(0, 255, 255), -1); // 黄色干扰圆
|
||||
|
||||
// 撒一些随机噪点(模拟摄像头传感器噪点)
|
||||
for (int i = 0; i < 200; i++)
|
||||
{
|
||||
int x = rand() % 600;
|
||||
int y = rand() % 450;
|
||||
// 随机颜色(模拟 CCD/CMOS 噪点)
|
||||
uchar noise_color = static_cast<uchar>(rand() % 128 + 60);
|
||||
cv::circle(scene, cv::Point(x, y), 1,
|
||||
cv::Scalar(noise_color, noise_color, noise_color), -1);
|
||||
}
|
||||
// 画装甲板的中间横梁(深灰色,不会被 inRange 误检为红色)
|
||||
// 注意:横梁必须在灯条之前画!这样红色灯条覆盖在横梁上方,
|
||||
// 保证灯条从顶到底都是纯红色,不被横梁切断
|
||||
cv::rectangle(scene, cv::Point(200, 180), cv::Point(400, 220),
|
||||
cv::Scalar(80, 80, 80), -1); // 深灰色横梁
|
||||
|
||||
// 在上面画红色灯条(最后画,确保不被其他元素覆盖)
|
||||
// 灯条是竖直的细长矩形,模拟 RoboMaster 装甲板侧面的 LED 灯条
|
||||
// 左灯条
|
||||
cv::rectangle(scene, cv::Point(200, 120), cv::Point(240, 280),
|
||||
cv::Scalar(0, 0, 255), -1); // 纯红色竖直矩形 (B=0,G=0,R=255)
|
||||
// 右灯条
|
||||
cv::rectangle(scene, cv::Point(360, 120), cv::Point(400, 280),
|
||||
cv::Scalar(0, 0, 255), -1); // 纯红色竖直矩形
|
||||
|
||||
cv::imwrite("01_original_scene.jpg", scene);
|
||||
std::cout << " -> 已保存 01_original_scene.jpg(原始场景图)" << std::endl;
|
||||
@@ -177,6 +178,8 @@ int main()
|
||||
// 创建结果图:在原图上画检测框
|
||||
cv::Mat result = scene.clone(); // clone() 创建一个完全相同的副本
|
||||
|
||||
std::cout << " -> 共找到 " << contours.size() << " 个轮廓" << std::endl;
|
||||
|
||||
int valid_count = 0; // 统计有效灯条的个数
|
||||
for (size_t i = 0; i < contours.size(); i++)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user