我使用下面的代码来找到一个矩形物体的旋转和平移向量。 矩形物体的高度和宽度分别为33和44厘米。所以我使用下面的代码来创建对象点
width = 44
height = 33
objPoints = np.array(
[(0, 0, 0), (width * 0.01, 0, 0), (width * 0.001, -(height* 0.001) , 0), (0, -(height* 0.001), 0)]
)
我使用下面的代码来确定旋转、平移向量
def findPose(imagePoints):
(success, rotation_vector, translation_vector) = cv2.solvePnP(objPoints, imagePoints, camera_matrix,
dist_coeffs, flags=cv2.SOLVEPNP_ITERATIVE)
print("Rotation Vector:\n {0}".format(rotation_vector))
print("Translation Vector:\n {0}".format(translation_vector))
(end_point2D, jacobian) = cv2.projectPoints(np.array([(0.0, 0.0, 1000.0)]), rotation_vector,
translation_vector, camera_matrix, dist_coeffs)
由于某些原因,结果总是错误的。我是否正确创建了对象点
我的猜测是,您尝试将点从厘米转换为米,但将最后两个点从毫米转换为米(按
0.001
而不是0.01
缩放)我认为你打算使用:
我不是摄影测量专家,但我认为解决方案是“比例不变”,因此您可以按
1.0
缩放坐标,并得到相同的结果(我不确定)我使用了来自Head Pose Estimation using OpenCV and Dlib的代码示例
我将坐标(按
0.01
而不是0.001
缩放后)放入MATLAB 3D绘图中。我旋转了绘图,使其接近示例中的头部姿势
代码如下:
结果:
你的帖子遗漏了信息,所以我真的不能说这个解决方案是否正确
相关问题 更多 >
编程相关推荐