Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用OpenCV重建三维物体_Opencv_Camera_Calibration - Fatal编程技术网

用OpenCV重建三维物体

用OpenCV重建三维物体,opencv,camera,calibration,Opencv,Camera,Calibration,我正在按照OpenCV相机校准教程运行相机校准 ret、mtx、dist、rvecs、tvecs=cv2.calibleCamera(objpoints、imgpoints、gray.shape[:-1],无,无) 接下来我要做的是重建一些特征点的三维位置。特征点在图像空间中定义。以下是我的计划: 找到新的相机矩阵: h,w=我的图像尺寸 newcameramtx,roi=cv2.GetOptimizeNewCameraMatrix(mtx,dist,(w,h),1,(w,h)) 取消对要素

我正在按照OpenCV相机校准教程运行相机校准

ret、mtx、dist、rvecs、tvecs=cv2.calibleCamera(objpoints、imgpoints、gray.shape[:-1],无,无)
接下来我要做的是重建一些特征点的三维位置。特征点在图像空间中定义。以下是我的计划:

  • 找到新的相机矩阵:
  • h,w=我的图像尺寸
    newcameramtx,roi=cv2.GetOptimizeNewCameraMatrix(mtx,dist,(w,h),1,(w,h))
    
  • 取消对要素点位置的扭曲:
  • new_points=cv2.不失真点(我的功能点,mtx,dist,P=newcameramtx)
    
  • 重建给定Z的特征点的三维坐标。我这里有两个问题。首先,我不知道如何重建三维坐标。2.当我这样做时,我应该使用原始的相机矩阵“mtx”还是新的相机矩阵“newcameramtx”。“投资回报率”呢?我应该在哪里使用它
  • 多谢各位

    看看这些文档,我发现它们更容易阅读。关键方程式如下:

    一旦你没有扭曲你的形象,这个方程式适用。带有fx、fy、cx和cy的矩阵是您的相机矩阵,通常称为M

    这个方程告诉你如何从左边的2D像素位置(x,y)到世界上的3D位置(右边的[x,y,Z])

    首先,我不知道如何重建三维坐标

    为此,我们可以应用方程。给定像素位置和范围(插入为w),我们有:

    我们可以在代码中这样做:

    pixels = [x, y, range]
    XYZ = np.mult( np.linalg.inv(mtx), pixels)
    
    我不确定你是否想打电话,因为这会裁剪出可能无效的像素。在你对系统有更好的了解之前,我会暂时跳过这一步。ROI告诉你未失真的图像在哪里不会有任何空白像素

    我真的很推荐学习OpenCV(或新版本3)这本书;它帮了我很大的忙。我从阅读文档(假设有很多先验知识)变得非常沮丧,到真正理解正在发生的事情。

    看看这些文档,我发现它们更容易阅读。关键的等式是:

    一旦你的图像没有失真,这个方程就适用了。带有fx、fy、cx和cy的矩阵就是你的相机矩阵,通常称为M

    这个方程告诉你如何从左边的2D像素位置(x,y)到世界上的3D位置(右边的[x,y,Z])

    首先,我不知道如何重建三维坐标

    为此,我们可以应用方程。给定像素位置和范围(插入为w),我们有:

    我们可以在代码中这样做:

    pixels = [x, y, range]
    XYZ = np.mult( np.linalg.inv(mtx), pixels)
    
    我不确定你是否想打电话,因为这会裁剪出可能无效的像素。在你对系统有更好的了解之前,我会暂时跳过这一步。ROI告诉你未失真的图像在哪里不会有任何空白像素


    我真的很推荐学习OpenCV(或新版本3)这本书;它帮了我很大的忙。它让我从阅读文档(假定有很多先验知识)的沮丧中解脱出来要真正理解发生了什么。

    您的问题格式不正确,请以可读的方式提出您的问题格式不正确,请以可读的方式提出谢谢您的帖子。1)我需要致电getOptimalNewCameraMatrix,因为newcameramtx需要取消我的功能点。2)我如何获得“范围”?另外,我认为像素=[xZ,yZ,Z]范围就是“为给定的Z重建特征点的三维坐标”中的Z。2D图像不能告诉你任何给定点的范围——你需要一个立体装置或类似的装置。像素=[x,y,range],这些x和y值是图像上的整数坐标。正如我提到的,如果我使用你提出的公式,结果是不正确的。如果我设置像素=[xZ,yZ,Z],但是,结果是正确的参见此处的工作示例谢谢您的帖子。1)我需要调用GetOptimizeNewCameraMatrix,因为newcameramtx需要取消对我的特征点的扭曲。2)我如何获得“范围”?另外,我认为像素=[xZ,yZ,Z]范围是“重建给定Z的特征点的三维坐标”中的Z“2D图像不能告诉你任何给定点的范围——你需要一个立体装置或类似的东西。在像素=[x,y,range]中,这些x和y值是图像上的整数坐标。正如我提到的,如果我使用你提出的公式,结果是不正确的。但是,如果我设置像素=[xZ,yZ,Z],结果是正确的,请参见这里的工作示例