c++ - 立体系统 - 使用 OpenCv 获取 3d 位置

标签 c++ opencv stereo-3d correspondence

我有一个带 2 个摄像头的立体声系统。我校准了这些相机。我尝试计算每个指尖之间的距离。在左图中,我使用凸包找到指尖。我计算这些点的对极线。我在右图上画对极线。如何计算每个指尖的 3d 位置?我使用了 c++ 和 opencv。

图片下方有5个窗口。他们是 : 正确的图像, 左图, 在右图上使用凸包找到指尖, 在左图画对极线, 在左边的图像上找到对应点

enter image description here

立体校准后我的.yml文件如下

%YAML:1.0
CM1: !!opencv-matrix
 rows: 3
 cols: 3
 dt: d
 data: [ 1.4947330489959640e+02, 0., 8.5026435902438408e+01, 0.,
   1.7045159164506524e+02, 6.8513237416979280e+01, 0., 0., 1. ]
CM2: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [ 1.4947330489959640e+02, 0., 7.6063817190941975e+01, 0.,
   1.7045159164506524e+02, 6.9869364400956655e+01, 0., 0., 1. ]
D1: !!opencv-matrix
rows: 1
cols: 5
dt: d
data: [ 4.6664660489275862e+00, -9.5605452982913761e+01, 0., 0.,
   4.4411083031870203e+02 ]
D2: !!opencv-matrix
rows: 1
cols: 5
dt: d
data: [ -2.6243438145377401e-01, 3.1158182596121313e+00, 0., 0.,
   -6.9555261934841601e+00 ]
R: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [ -9.9870707407742809e-01, 5.0820157566619700e-02,
   1.2213814337059467e-03, -4.6584627039081256e-02,
   -9.2456021193091820e-01, 3.7817758664136281e-01,
   2.0348285218473684e-02, 3.7763173343769685e-01,
   9.2573226215224258e-01 ]
T: !!opencv-matrix
rows: 3
cols: 1
dt: d
data: [ -5.0257191774306198e-01, -5.1791340062890008e+00,
   -1.7104054803114692e+00 ]
E: !!opencv-matrix
rows: 3
cols: 3
dt: d
data: [ -1.8506509733057530e-01, -3.5371782058656147e+00,
   -4.1476544229091719e+00, 1.7184205294528965e+00,
   1.0286402846218139e-01, 4.6315798080871423e-01,
   -5.1490256443274198e+00, 7.2786240503729882e-01,
   -1.8373573684783620e-01 ]
 F: !!opencv-matrix
  rows: 3
 cols: 3
 dt: d
 data: [ -2.0635586643392613e-06, -3.4586914187982223e-05,
   -4.3677532717492718e-03, 1.6802903312164187e-05,
   8.8202517402136951e-07, -8.1218529743132760e-04,
   -9.5988974549000728e-03, 3.6330053228360980e-03, 1. ]

最佳答案

由于您无法确定使用您的方法对两张图像都获得了准确的指尖,因此我会使用不同的方法:

  • 首次使用3D image reconstruction获取您的手的深度图像。
  • 然后使用您现有的算法在深度图像中获取指尖。
  • 最后使用深度信息重建指尖的 3D 位置。

关于c++ - 立体系统 - 使用 OpenCv 获取 3d 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27473257/

相关文章:

opencv - OpenCV摄像机校准:distCoeffs中的k3值非常大

opencv - 扭曲的 3D 重建 OPENCV + PCL(Martin Peris 代码)

c++ - 关键字 "this"的实际含义是什么?

c++ - 如何构建最新的clang-tidy?

c++ - 返回非静态本地对象时,选择复制构造函数而不是 move 构造函数

c++ - 如何在 C++ 中实现内部抽象成员类?

python - 如何使用opencv从图形中删除其他对象?

opencv - 构建 OpenCV 4 需要 CC 5.3 或更高版本 - RTX 2080TI

python - 使用opencv获得所需帧率的imshow()

opencv - 在立体相机中找到右图像上对应的 2d 点