我有一个带2个摄像头的立体声系统。我校准了这些相机。我试着计算每个指尖之间的距离。在左图上,我发现使用凸包的指尖。我为这些点计算了epipoolar线。我在右图上绘制了极线。如何计算每个指尖的3d位置?我用过c ++和opencv。
图片下方有5个窗口。他们是 : 正确的形象, 左图, 在右图上使用凸包找到指尖, 在左图上绘制极线, 找到左图像上的对应点
立体声校准后,我的.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. ]
答案 0 :(得分:0)
由于您不能确定两种图像的方法都准确无误,我会采用不同的方法:
答案 1 :(得分:0)
您可能需要一些基于3D-2D点对应的快速简单的解决方案。然后你将这些点拟合到3D模型中,可以自由地找到很多3D模型,即:http://www.turbosquid.com/3d-model/anatomy/hand OpenCV提供了一个很好的方法 - solvePnP - 可以完成拟合步骤。 我们需要做以下事情:
答案 2 :(得分:0)
使用cv::undistortPoints()
使2D点变形。将两个相机的未失真点传递到cv::triangulatePoints()
(以及相机投影矩阵)和cv::Mat
,以存储(均匀)3D坐标。调用convertPointsFromHomogenous()
以获取普通(不均匀)3D点。注意:投影矩阵是cv::stereoRectify
和/或<opencv-dir>/samples/cpp/stereo_calib.cpp
中的P1和P2。您可能会发现How to correctly use cv::triangulatePoints()是有用的。