使用OpenCV校准类似相机的设备后,重新投影错误,哪种方法最合适?

时间:2019-01-03 11:06:46

标签: c++ opencv computer-vision camera-calibration

我正在使用OpenCV和c ++进行与增强现实相关的项目。

在我的项目中,首先,我拍摄了一张预定义的自定义图案的图像(有些图像具有特定的图案,以后可以识别)。我在影像w.r.t世界坐标中具有点的3D坐标(图案中心点与棋盘点相同)。通过使用 cv :: GetContoursFromBWImage ,我可以获得对应点的2D图像坐标。

通过使用3D-2D点,我将 cv :: calibrateCamera 与标志 CV_CALIB_USE_INTRINSIC_GUESS 一起使用,以获取摄像机的内部和外部参数。

现在,我想使用此参数并在3D坐标的图像中找到2D点,这些3D坐标位于相机字段和自定义图案之间。使用 cv :: projectPoints ,仅当我的3D点靠近或在图案平面上时,我才能获得2毫米的精度。但是,当我通过在场之间(相机和图案空间之间,距图案平面约250mm,距相机源约300mm)提供3D点进行相同尝试时,投影效果非常差(即50 mm错误)。

Just for understanding, I am adding this image. Though It is very bad drawing but I think it is enough for understanding.

请提出我在做什么和应该做什么。 对我来说,使用其他任何库都不是问题。

double error = cv::calibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs, rvecs, tvecs, CV_CALIB_USE_INTRINSIC_GUESS );
// objectPoints is 3D co-ordinate of points detected
// imagePoints is 2D co-ordinate of points in image

// By using above parameter, I am using below code for projection
projectPoints(objectPointsForPrediction, rvec, tvec, cameraMatrix, distCoeffs, imagePointsPredicted);

0 个答案:

没有答案