我正在尝试从立体相机的图像中获取 3D 点云。我用 Python 中的 OpenCV 校准了我的立体相机(每个 240x320),重投影误差为 0.25。我使用了一个 9x10 行和列的棋盘图案,在不同的光照条件下以不同的角度拍摄了 10 张图像,并在这样做的同时移动了相机。(我不确定,也许这就是问题所在)然后我将它们导入到 matlab 中,matlab 给了我棋盘角。(我选择matlab是因为它比opencv精确得多)然后我将角加载到我的python校准脚本中。
内在校准完美无缺:
但是我不确定是否可以使用外部校准的结果,因为图像仍然是圆形的并且有那些黑色空间;图像的矩形中心很好:
参数和矩阵保存并加载到另一个脚本中。该脚本通过左右图像运行 sobel 算子,并在两个图像中找到匹配的边缘像素:
然后我将那些匹配的像素交给 cv.triangulatePoints(projMatr1, projMatr2, projPoints1, projPoints2) 这应该给我点的 3D 坐标。我用 plotly 绘制它们,但结果无法识别,并且离所示杯子的边缘很远:
有没有人有想法,可能是什么或我做错了什么?如果需要,我可以在这里发布我的代码。
相关分类