When a face is centered on camera the reported translation X and Y coordinates are not zeros. A possible reason for this is that the camera intrinsic matrix has offsets computed for the wrong axis when doing the position solving.
The camera matrix is
self.camera = np.array([[width, 0, width/2], [0, width, height/2], [0, 0, 1]], np.float32)
so that means c_x = width/2 and c_y = height/2 but then later image_pts that is passed to solvePnP() is a vector of (y,x) points so self.camera translates the Y coordinates with width/2 and vice-versa for the point X coordinates.
I'd submit a patch to fix this but the code is somewhat tricky so I'm not sure I'd get it right.
When a face is centered on camera the reported translation X and Y coordinates are not zeros. A possible reason for this is that the camera intrinsic matrix has offsets computed for the wrong axis when doing the position solving.
The camera matrix is
so that means
c_x = width/2andc_y = height/2but then laterimage_ptsthat is passed tosolvePnP()is a vector of(y,x)points soself.cameratranslates the Y coordinates withwidth/2and vice-versa for the point X coordinates.I'd submit a patch to fix this but the code is somewhat tricky so I'm not sure I'd get it right.