接着写这段代码取出结构体类名0作为原点其他类名作为目标点取最近的=struct ObjectInfo { std::string className; int xCoord; int yCoord;};std::vector<ObjectInfo> objects;for (size_t j = 0; j < res.size(); j++) { cv::Rect r = get_rect(img, res[j].bbox); cv::rectangle(img, r, cv::Scalar(0x27, 0xC1, 0x36), 2); cv::putText(img, std::to_string(r.x) + "," + std::to_string(r.y), cv::Point(r.x, r.y - 15), cv::FONT_HERSHEY_PLAIN, 1.2, cv::Scalar(0xFF, 0xFF, 0xFF), 2); ObjectInfo obj; obj.className = res[j].class_name; obj.xCoord = r.x; obj.yCoord = r.y; objects.push_back(obj);}
时间: 2024-03-05 20:48:04 浏览: 94
好的,下面是代码实现:
```c++
struct ObjectInfo {
std::string className;
int xCoord;
int yCoord;
};
std::vector<ObjectInfo> objects;
// 定义原点类名和目标点类名
std::string origin_class = "class0";
std::string target_class = "class1";
// 定义最近的目标点变量
ObjectInfo nearest_obj;
int min_distance = std::numeric_limits<int>::max();
// 遍历所有的ObjectInfo结构体
for (size_t i = 0; i < objects.size(); i++) {
ObjectInfo obj = objects[i];
// 如果当前结构体是原点类,则跳过本次循环
if (obj.className == origin_class) {
continue;
}
// 如果当前结构体是目标点类,则计算距离
if (obj.className == target_class) {
int distance = sqrt(pow(obj.xCoord, 2) + pow(obj.yCoord, 2));
if (distance < min_distance) {
nearest_obj = obj;
min_distance = distance;
}
}
}
// 最近的目标点为 nearest_obj
```
上面的代码中,我们定义了一个原点类名和一个目标点类名,然后遍历了vector容器中所有的ObjectInfo结构体,如果当前结构体是原点类,则跳过本次循环。如果当前结构体是目标点类,则计算该结构体的坐标与原点的距离,找到距离最近的那个结构体,并将其赋值给nearest_obj变量。最后,nearest_obj就是我们要找的最近的目标点。
阅读全文