gpt4 book ai didi

python - 如何使用 openCV 在两个摄像头之间转换坐标?

转载 作者:行者123 更新时间:2023-12-03 17:22:33 26 4
gpt4 key购买 nike

我有两个 intel realsense 摄像头:CameraLeft 和 CameraRight。我试图找到这两个摄像头之间的旋转矩阵和变换向量,这样我就可以在两个摄像头之间变换坐标系。
这是我尝试过的:
1.我使用 cv.calibrateCamera() 来获取内在矩阵:迈特
2.我使用 cv.stereoCalibrate() 得到旋转矩阵 R 和变换向量 电话
3.我同时拍了两张照片,分别是Pleft和Pright。
4.(uleft, vleft)和(uright, vright)表示两张图片中的同一个物体。有了内在矩阵 Mleft , Mright 和深度 Dleft, Dright 和 (uleft, vleft) , (uright, vright) ,我得到了相机坐标 (Xleft, Yleft, Zleft) 和 (Xright, Yright, Zright)。
这是问题所在:
在我的假设中, R *(Xleft, Yleft, Zleft) + 电话 =(Xright,Yright,Zright)。但结果并非如此。
这是我的代码:

import numpy as np
import h5py
import cv2


cameraMatLeft = np.array([
[
1286.540148375528,
0.0,
929.5596785987797
],
[
0.0,
1272.8889372475517,
586.0340979684613
],
[
0.0,
0.0,
1.0
]
])
cameraMatRight = np.array([
[
1294.8590822926074,
0.0,
976.7466553094133
],
[
0.0,
1283.5006893318534,
520.6437123281569
],
[
0.0,
0.0,
1.0
]
])

R = np.array([
[
0.736828762715704,
0.1290536263233139,
0.6636479005976342
],
[
-0.09833992557804119,
0.9916309806151367,
-0.08364961040894248
],
[
-0.6688891040166153,
-0.0036276462155228617,
0.7433533525254223
]
])

T = np.array([
[
-190.9527690494799
],
[
11.868938400892926
],
[
71.571368261639625
]
])





# two pixel point
rightPoint = (1107,568)
leftPoint = (1840,697)


fLeft = h5py.File('C:\\SMIIP\\camera\\depth_pics\\leftDepth0.h5','r')
fRight = h5py.File('C:\\SMIIP\\camera\\depth_pics\\rightDepth0.h5','r')


d_left = fLeft['depth'][leftPoint[1], leftPoint[0]]
d_right = fRight['depth'][rightPoint[1], rightPoint[0]]

#print(d_left)
#print(d_right)

leftInv = np.linalg.inv(cameraMatLeft)
RightInv = np.linalg.inv(cameraMatRight)

leftPixPoint = np.array([d_left*leftPoint[0], d_left*leftPoint[1], d_left])
rightPixPoint = np.array([d_right*rightPoint[0], d_right*rightPoint[1], d_right])

#compute the camera coordinate
leftResult = np.matmul(leftInv, leftPixPoint)
rightResult = np.matmul(RightInv, rightPixPoint)
leftResult = leftResult.reshape(3, 1)
rightResult = rightResult.reshape(3, 1)

leftRotated = np.matmul(R, leftResult) + T
rightRotated = np.matmul(R, rightResult) + T

print(leftResult,rightResult)

#print(leftRotated, rightRotated)


难道我做错了什么?请帮帮我。任何帮助将非常感激。

最佳答案

我认为您所做的并非完全错误,但我不确定您用于将 left_cam 坐标转换为 right_cam 坐标的公式。
从我在这个引用资料中看到的:Here.
所以从他们所说的 Pr=R(Pl-T) 。
不确定这会解决您的情况,但希望我能有所帮助。

关于python - 如何使用 openCV 在两个摄像头之间转换坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66381243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com