Ios 基于solvePnP()和solvePnP_-IPPE_-SQUARE方法的摄像机姿态估计

Ios 基于solvePnP()和solvePnP_-IPPE_-SQUARE方法的摄像机姿态估计,ios,opencv,opencv-solvepnp,Ios,Opencv,Opencv Solvepnp,我正在与ARKit合作,试图从已知尺寸(0.16米)的二维码中获取相机位置。 为了检测二维码,我使用视觉框架,这样我就可以得到图像上的每个角点 数据准备: let intrinsics = arFrame.camera.intrinsics let imageResolution = arFrame.camera.imageResolution let imagePointsArray = [NSValue(cgPoint: visionResult.topLeft), NSValue(cgP

我正在与ARKit合作,试图从已知尺寸(0.16米)的二维码中获取相机位置。 为了检测二维码,我使用视觉框架,这样我就可以得到图像上的每个角点

数据准备:

let intrinsics = arFrame.camera.intrinsics
let imageResolution = arFrame.camera.imageResolution

let imagePointsArray = [NSValue(cgPoint: visionResult.topLeft), NSValue(cgPoint: visionResult.topRight), NSValue(cgPoint: visionResult.bottomLeft), NSValue(cgPoint: visionResult.bottomRight)]
let intrinsicsArray = (0..<3).flatMap { x in (0..<3).map { y in NSNumber(value: intrinsics[x][y]) } }
let squareLength = NSNumber(value: 0.16)
let res = OpenCVWrapper.findPose(imagePointsArray, intrinsics: intrinsicsArray, size: imageResolution, squareLength: squareLength)

感谢您的帮助

相机和标签之间的估计转换不正确。
tz
为负值,这在物理上是不可能的。有关摄影机坐标系的详细信息,请参见

必须确保每个三维对象点与相应的二维图像点匹配

如果我绘制二维坐标,我有以下图像:

使用RGBM设置点的顺序

如果交换最后两个图像点,则应获得:

rvec: [0.1217246105180353, 0.1224686744740433, -3.116495036698598]
tvec: [-0.2866576939480562, 0.07760414675470864, 2.127895748451679]
Calculated distance to QR 2.0856588
object points: 
[-0.079999998, 0.079999998, 0;
 0.079999998, 0.079999998, 0;
 0.079999998, -0.079999998, 0;
 -0.079999998, -0.079999998, 0]
image points: 
[795.98724, 717.27045;
 684.5592, 715.80487;
 793.31567, 826.06146;
 684.40692, 824.39771]
cameraMatrix points: 
[1454.490478515625, 0, 935.6685791015625;
 0, 1454.490478515625, 717.999267578125;
 0, 0, 1]
rvec: 
[-0.9251278749049585;
 1.185890362907954;
 -0.9989977018022447]
tvec: 
[0.04753833193572054;
 -0.009999648596310796;
 -0.3527916723601041]
rvec in world coords:
[0.9251278749049584;
 -1.185890362907954;
 0.9989977018022447]
rvec scenekit :
[0.9251278749049584;
 1.185890362907954;
 -0.9989977018022447]
tvec in world coords:
[-0.1159248829391864;
 -0.3366933247327607;
 0.004569098144615695]
tvec scenekit :
[-0.1159248829391864;
 0.3366933247327607;
 -0.004569098144615695]
rvec: [0.1217246105180353, 0.1224686744740433, -3.116495036698598]
tvec: [-0.2866576939480562, 0.07760414675470864, 2.127895748451679]