怎么将cv2.keypoint_convert的列表数据单独取出转为float型数据并输出
时间: 2023-05-22 07:03:12 浏览: 156
您可以使用以下代码将cv2.keypoint_convert的列表数据单独取出转为float型数据并输出:
```
import cv2
import numpy as np
keypoints = [...] # cv2.keypoint_convert的列表数据
# 将每个关键点的 x, y 坐标单独取出并转为float型数据
keypoints_x = np.array([kp[0] for kp in keypoints], dtype=np.float32)
keypoints_y = np.array([kp[1] for kp in keypoints], dtype=np.float32)
print("keypoints_x: ", keypoints_x)
print("keypoints_y: ", keypoints_y)
```
该代码将会输出每个关键点的 x, y 坐标的float型数据。
相关问题
Python 怎么将cv2.keypoint_convert坐标点分开为两个float型数据
可以使用numpy中的split函数将cv2.keypoint_convert返回的坐标点数组分开为两个float型数据,代码如下:
```python
import cv2
import numpy as np
# 获取关键点坐标
keypoints = [cv2.KeyPoint(10, 20, 1), cv2.KeyPoint(30, 40, 2)]
points = cv2.KeyPoint_convert(keypoints)
# 分开坐标点数组
x, y = np.split(points, 2, axis=1)
# 打印结果
print("x:", x)
print("y:", y)
```
输出结果为:
```
x: [[10.]
[30.]]
y: [[20.]
[40.]]
```
这样就将坐标点分开为了两个float型数据。
ambiguous overload for ‘operator=’ (operand types are ‘cv::Point2f {aka cv::Point_<float>}’ and ‘const Point2f {aka const cv::Point_<float>}’) class CV_EXPORTS_W_SIMPLE KeyPoint如何解决
当你在使用 OpenCV 的 KeyPoint 类时,遇到 "ambiguous overload for ‘operator=’" 的错误时,这通常是因为在赋值操作中存在二义性。
要解决这个问题,你可以尝试以下方法:
1. 显式地进行类型转换:在进行赋值操作时,显式地将右侧的 KeyPoint 对象转换为左侧 KeyPoint 对象的类型。例如:
```cpp
keypoint1 = static_cast<cv::KeyPoint>(keypoint2);
```
2. 使用成员函数进行赋值:KeyPoint 类提供了成员函数来进行赋值操作,例如使用 `KeyPoint::convert()` 成员函数。你可以尝试使用该函数来实现赋值操作。例如:
```cpp
keypoint1.convert(keypoint2);
```
3. 检查 OpenCV 版本:确保你使用的是最新版本的 OpenCV 库。有时候,更新到最新版本可能会修复这样的问题。
4. 检查代码逻辑:检查你的代码逻辑,确保没有其他地方存在导致二义性的操作。
如果以上方法仍然无法解决问题,可能需要提供更多的代码和错误信息来帮助进一步分析和解决问题。
阅读全文