std::cout << "***************************" <<std::endl; yolov5trt->detect_api(color_img, conf_thre, is_seg); res_boxes = yolov5trt->res; boxes.clear(); for (int id = 0; id < res_boxes.size(); id++) { this->Draw_mask_bbox(res_boxes[id]); // int dist = yolov5trt->get_distance(resized_box, depth_img, 24); int dist = -1; b.cls = all_classes[class_names[res_boxes[id].class_id]]; b.box = resized_box; b.conf = res_boxes[id].conf; // b.dist = (dist / 1000); b.dist = dist; boxes.push_back(b); std::cout << "class_name: " << class_names[res_boxes[id].class_id] << " conf: " << res_boxes[id].conf << " dist: " << dist << std::endl; } batch_boxes.BoundingBoxes = boxes; loca_pub.publish(batch_boxes); sensor_msgs::ImagePtr msg = cv_bridge::CvImage(std_msgs::Header(), "bgr8", color_img).toImageMsg(); img_pub.publish(msg);
时间: 2024-04-18 13:33:30 浏览: 165
这段代码涉及到将目标检测结果发布为ROS消息的过程。
首先,使用 `std::cout` 输出一行分隔符,用于区分不同的输出结果。
接下来,调用 `yolov5trt->detect_api` 方法对 `color_img` 进行目标检测,设置置信度阈值为 `conf_thre`,并指定是否进行分割操作。
然后,将检测到的结果赋值给 `res_boxes`。
接下来,清空 `boxes` 容器,为后续的结果存储做准备。
然后,使用 `for` 循环遍历 `res_boxes` 中的每个检测结果。
在循环中,调用 `this->Draw_mask_bbox(res_boxes[id])` 方法绘制目标的掩膜边界框。
接下来,将目标的类别、边界框、置信度和距离等信息保存到结构体 `b` 中。
将 `b` 添加到 `boxes` 容器中。
然后,使用 `std::cout` 输出目标类别、置信度和距离等信息。
接下来,将 `boxes` 赋值给 `batch_boxes.BoundingBoxes`,即将目标检测结果存储到 `batch_boxes` 中。
然后,使用 `loca_pub.publish(batch_boxes)` 发布目标检测结果的ROS消息。
接下来,使用 `cv_bridge::CvImage` 将 `color_img` 转换为ROS图像消息,并将其赋值给 `msg`。
最后,使用 `img_pub.publish(msg)` 发布图像消息的ROS消息。
这段代码的目的是将目标检测结果作为ROS消息发布出去,并将检测结果绘制在图像上并发布图像消息。
阅读全文