把归一化的结果转化成Float32类型的ndarray数据
时间: 2024-04-22 10:24:42 浏览: 70
可以使用NumPy库将归一化的结果转化为Float32类型的ndarray数据。以下是一个示例代码:
```python
import numpy as np
# 假设normalized_data是归一化的数据,类型为ndarray
normalized_data = np.array([0.2, 0.4, 0.6, 0.8])
# 将归一化的数据转化为Float32类型的ndarray数据
float32_data = normalized_data.astype(np.float32)
print(float32_data)
```
运行代码后,输出结果如下:
```
[0.2 0.4 0.6 0.8]
```
这样,归一化的结果就被转化为了Float32类型的ndarray数据。
相关问题
可以解决AttributeError: 'numpy.ndarray' object has no attribute 'queryIdx问题吗,这部分的代码是def matched_points(K, img_depth1, img_depth2, keypoint1, keypoint2, good_matches): # 测试图像特征点坐标列表(->int) points1 = np.array([list(keypoint1[x.queryIdx].pt) for x in good_matches]).astype(int) # 样本图像特征点坐标列表(->int),PnP 3D-2D中的2D points2 = np.array([list(keypoint2[x.trainIdx].pt) for x in good_matches]).astype(int) points_3d1 = [] points_3d2 = [] # shape函数是Numpy中的函数,它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度 for i in range(points1.shape[0]): depth1 = img_depth1[points1[i][1], points1[i][0]] # 深度信息,由于imread得到宽高顺序,所以1,0 depth2 = img_depth2[points2[i][1], points2[i][0]] if depth1 == 0 or depth2 == 0: # 没有读取到深度->bad depth continue # 坐标转化为归一化坐标 point1 = pixel2cam(points1[i], K) point2 = pixel2cam(points2[i], K) # 读取深度,这里除以5000不太清楚是固定步骤还是说可改参数( dd1 = point1 / 5000.0 dd2 = point2 / 5000.0 points_3d1.append([point1[1] * dd1, point1[0] * dd1, dd1]) # 世界坐标系坐标 points_3d2.append([point2[1] * dd2, point2[0] * dd2, dd2]) # 相机图像坐标系坐标 points_3d1 = np.array(points_3d1).astype(np.float64) points_3d2 = np.array(points_3d2).astype(np.float64) return points_3d1, points_3d2
这个问题可能是因为good_matches中的元素类型不是cv2.DMatch,而是numpy.ndarray。可以在函数调用之前将其转换为cv2.DMatch类型。
修改代码如下:
```
def matched_points(K, img_depth1, img_depth2, keypoint1, keypoint2, good_matches):
# 将good_matches转换为cv2.DMatch类型
good_matches = [cv2.DMatch(*match) for match in good_matches]
# 测试图像特征点坐标列表(->int)
points1 = np.array([list(keypoint1[x.queryIdx].pt) for x in good_matches]).astype(int)
# 样本图像特征点坐标列表(->int),PnP 3D-2D中的2D
points2 = np.array([list(keypoint2[x.trainIdx].pt) for x in good_matches]).astype(int)
points_3d1 = []
points_3d2 = []
for i in range(points1.shape[0]):
depth1 = img_depth1[points1[i][1], points1[i][0]] # 深度信息,由于imread得到宽高顺序,所以1,0
depth2 = img_depth2[points2[i][1], points2[i][0]]
if depth1 == 0 or depth2 == 0: # 没有读取到深度->bad depth
continue
# 坐标转化为归一化坐标
point1 = pixel2cam(points1[i], K)
point2 = pixel2cam(points2[i], K)
# 读取深度,这里除以5000不太清楚是固定步骤还是说可改参数(
dd1 = depth1 / 5000.0
dd2 = depth2 / 5000.0
points_3d1.append([point1[1] * dd1, point1[0] * dd1, dd1]) # 世界坐标系坐标
points_3d2.append([point2[1] * dd2, point2[0] * dd2, dd2]) # 相机图像坐标系坐标
points_3d1 = np.array(points_3d1).astype(np.float64)
points_3d2 = np.array(points_3d2).astype(np.float64)
return points_3d1, points_3d2
```
阅读全文