我有一张图片I1,不是我拍摄的,是从Google下载的。
这是通过正方形和它的真实世界和图像坐标完成的。我选择图像I1中的一个正方形,并使用单应性H获取在I2中该正方形的对应角点。由于我知道在I2中的这些对应点形成了一个正方形,我应该能够从这些点中获取相机矩阵。然而,当我在图像中的不同位置取同一个正方形时,我得到了不同的相机矩阵。这是为什么?我做错了什么,我该如何修复?如何计算正确的相机矩阵?
下面是一个示例。对于这两个选择的方块,我从
我将已知的单应性矩阵H应用于I1,得到以下图像I2。
我假设一个相机拍摄了以上的I2图像。我不知道这个相机的相机矩阵,我想要找到它。为了找到这个相机矩阵mtx
,我使用了OpenCV
相机校准方法:ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None,flags=cv2.CALIB_FIX_ASPECT_RATIO|cv2.CALIB_FIX_K1|cv2.CALIB_FIX_K2|cv2.CALIB_FIX_K3|cv2.CALIB_FIX_K4|cv2.CALIB_FIX_K5)
。这是通过正方形和它的真实世界和图像坐标完成的。我选择图像I1中的一个正方形,并使用单应性H获取在I2中该正方形的对应角点。由于我知道在I2中的这些对应点形成了一个正方形,我应该能够从这些点中获取相机矩阵。然而,当我在图像中的不同位置取同一个正方形时,我得到了不同的相机矩阵。这是为什么?我做错了什么,我该如何修复?如何计算正确的相机矩阵?
下面是一个示例。对于这两个选择的方块,我从
calibrateCamera
函数中得到了不同的mtx
值。
注意:上面图片中的红点不是I1中完美正方形的角点。我只是粗略标记它们来传达我的观点,即当我取两个不同位置但大小相同的正方形时,我得到的相机矩阵值是不同的。