python多个摄像头_使用多个摄像头进行3D点投影

本文作者在使用OpenCV 3.4进行多摄像头系统开发时,遇到将2D坐标转换为3D点的问题。通过内部和外部校准,作者能够跟踪对象并获取2D轨迹,但在尝试使用`cv2.triangulatePoints`函数进行3D投影时,发现结果偏离实际坐标。文章详细介绍了代码实现过程,并附带了相关参数和数据,以供重现问题。目前作者寻求解决方法以获取准确的3D坐标和距离信息。
摘要由CSDN通过智能技术生成

我在OpenCV 3.4中使用Python。

我有一个由2个摄像头组成的系统,我想用它来跟踪对象并获取其轨迹,然后确定其速度。

目前,我可以对每个摄像机进行内部和外部校准。我可以通过视频跟踪对象,并在视频计划中获取2d坐标。

我现在的问题是我想将我的两个2D平面中的点投影到3D点中。我已经尝试过功能,triangulatePoints但似乎无法正常工作。这是获取3d坐标的实际功能。它返回一些与实际坐标相比似乎有些偏离的坐标

defget_3d_coord(left_two_d_coords,right_two_d_coords):pt1=left_two_d_coords.reshape((len(left_two_d_coords),1,2))pt2=right_two_d_coords.reshape((len(right_two_d_coords),1,2))extrinsic_left_camera_matrix,left_distortion_coeffs,extrinsic_left_rotation_vector,\

extrinsic_left_translation_vector=trajectory_utils.get_extrinsic_parameters(1)extrinsic_right_camera_matrix,right_distortion_coeffs,extrinsic_right_rotation_vector,\

extrinsic_right_translation_vector=trajectory_utils.get_extrinsic_parameters(2)#returns arrays of the same size(pt1,pt2)=correspondingPoints(pt1,pt2)projection1=computeProjMat(extrinsic_left_camera_matrix,extrinsic_left_rotation_vector,extrinsic_left_translation_vector)projection2=computeProjMat(extrinsic_right_camera_matrix,extrinsic_right_rotation_vector,extrinsic_right_translation_vector)out=cv2.triangulatePoints(projection1,projection2,pt1,pt2)oc=[]foridx,eleminenumerate(out[0]):oc.append((out[0][idx],out[1][idx],out[2][idx],out[3][idx]))oc=np.array(oc,dtype=np.float32)point3D=[]foridx,eleminenumerate(oc):W=out[3][idx]obj=[None]*4obj[0]=out[0][idx]/W

obj[1]=out[1][idx]/W

obj[2]=out[2]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值