我正在使用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错误)。
请提出我在做什么和应该做什么。 对我来说,使用其他任何库都不是问题。
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);