怎样将[< cv2.DMatch 000001A5AC07D470>, < cv2.DMatch 000001A5AC0830F0>, < cv2.DMatch 000001A5AC07D870>]转化为坐标值输出?
时间: 2023-12-07 10:02:52 浏览: 81
要将`cv2.DMatch`类型的对象转化为坐标值输出,需要知道这些对象中包含了每个匹配点在两幅图像中的索引值,因此需要利用这些索引值来获取对应的坐标值。
假设`matches`为包含了`cv2.DMatch`对象的列表,`kp1`和`kp2`为分别提取出的两幅图像的关键点列表,可以按照以下步骤将其转化为坐标值输出:
1. 首先,需要获取所有匹配点的索引值。可以使用列表推导式来实现:
```
query_idxs = [match.queryIdx for match in matches]
train_idxs = [match.trainIdx for match in matches]
```
2. 然后,可以使用获取到的索引值来获取每个匹配点在两幅图像中的坐标值:
```
points1 = np.array([kp1[idx].pt for idx in query_idxs])
points2 = np.array([kp2[idx].pt for idx in train_idxs])
```
这里使用了`numpy`库中的`array`函数和列表推导式,将每个匹配点在两幅图像中的坐标值分别保存在`points1`和`points2`中。
3. 最后,将`points1`和`points2`合并成一个列表,即可得到每个匹配点在两幅图像中的坐标值:
```
matched_points = list(zip(points1, points2))
```
这里使用了`zip`函数和列表转换,将`points1`和`points2`中对应的元素依次组成元组,并将这些元组保存在`matched_points`中。
将以上步骤整合起来,可以得到以下代码:
```
query_idxs = [match.queryIdx for match in matches]
train_idxs = [match.trainIdx for match in matches]
points1 = np.array([kp1[idx].pt for idx in query_idxs])
points2 = np.array([kp2[idx].pt for idx in train_idxs])
matched_points = list(zip(points1, points2))
```
这样,就可以将`cv2.DMatch`类型的对象转化为坐标值输出。
阅读全文