points = [[float(coord[0]), float(coord[1])] for coord in contour.squeeze().tolist()] if len(contour) > 0 else []改成整数吧
时间: 2023-12-23 18:02:45 浏览: 138
如果您想将点坐标转换为整数类型,您只需要将浮点数转换为整数即可。以下是修改后的代码示例:
```python
# 将分割多边形的点坐标转换为列表的点(points)形式,并将点转换为整数类型
points = [[int(coord[0]), int(coord[1])] for coord in contour.squeeze().tolist()] if len(contour) > 0 else []
results.append({
"confidence": str(score),
"label": labels.get(label, "unknown"),
"points": points,
"type": "polygon",
"mask": mask.tolist() # 将分割掩码转换为列表形式
})
```
在这个示例中,我使用列表推导式来遍历`contour.squeeze().tolist()`中的每个坐标,并将其转换为整数类型。这样可以确保`points`列表中的每个点都是整数类型。
希望这次能够满足您的需求。如果您还有其他疑问,请随时提问。
相关问题
results = [] if polygon.shape[0] > 0: for label, score, seg in zip(class_ids, conf, polygon): # 将多边形的点坐标转换为列表形式 points = [[float(coord[0]), float(coord[1])] for coord in contour.squeeze().tolist()] if len(contour) > 0 else [] results.append({ "confidence": str(score), "label": labels.get(label, "unknown"), "points": points, "type": "polygon" 检查一下
代码中的 `points` 部分在使用 `contour` 变量时出现错误。根据之前的代码,应该使用 `seg` 变量来转换多边形的点坐标。以下是修改后的代码:
```python
results = []
if polygon.shape[0] > 0:
for label, score, seg in zip(class_ids, conf, polygon):
# 将多边形的点坐标转换为列表形式
points = [[float(coord[0]), float(coord[1])] for coord in seg]
results.append({
"confidence": str(score),
"label": labels.get(label, "unknown"),
"points": points,
"type": "polygon"
})
```
现在,代码将正确地将多边形的点坐标转换为浮点数类型,并将其作为 `points` 字段的值添加到结果中。
if masks is not None and masks.shape[0] > 0: for label, score, seg in zip(class_ids, conf, masks): # 解析分割掩码 mask = seg[0] # 取第一个对象的分割掩码 mask = mask.astype(np.uint8) # 将掩码转换为无符号整数类型 _, mask_binary = cv2.threshold(mask, 0, 255, cv2.THRESH_BINARY) # 将掩码转换为二值图像 # 获取分割多边形 contours, _ = cv2.findContours(mask_binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) contour = contours[0] if len(contours) > 0 else [] # 将分割多边形的点坐标转换为列表的点(points)形式 points = [[int(coord[0]), int(coord[1])] for coord in contour.squeeze().tolist()] if len(contour) > 0 else [] results.append({ "confidence": str(score), "label": labels.get(label, "unknown"), "points": points, "type": "polygon", "mask": mask.tolist() # 将分割掩码转换为列表形式 })mask是三维数组 改一下代码
如果mask不为None且mask的形状的第一个维度大于0:
对于label、score和seg中的每个元素进行循环:
# 解析分割掩码
mask = seg[0] # 取第一个对象的分割掩码
mask = mask.astype(np.uint8) # 将掩码转换为无符号整数类型
_, mask_binary = cv2.threshold(mask, 0, 255, cv2.THRESH_BINARY) # 将掩码转换为二值图像
# 获取分割多边形
contours, _ = cv2.findContours(mask_binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contour = contours[0] if len(contours) > 0 else []
# 将分割多边形的点坐标转换为列表的点(points)形式
points = [[int(coord[0]), int(coord[1])] for coord in contour.squeeze().tolist()] if len(contour) > 0 else []
results.append({
"confidence": str(score),
"label": labels.get(label, "unknown"),
"points": points,
"type": "polygon",
"mask": mask.tolist() # 将分割掩码转换为列表形式
})
阅读全文