В OpenCV я использую плату Charuco, откалибровал камеру и использую оценку для получения rvec и tvec.(похоже на пример кода).Я использую стационарную доску, с камерой движется.Я новичок в этом, поэтому, пожалуйста, потерпите меня, если я упускаю что-то простое.
Я понимаю, что могу использовать Rodrigues (), чтобы получить матрицу вращения 3x3 для ориентации доски от rvec,и что я могу преобразовать значение tvec в мировые координаты, используя worldPos = -Rt () * tvec (в python), чтобы получить положение камеры
Кажется, что я получил все, что мне нужно, однако, если я повернукамера физически, WorldPos также сильно меняется!Я уверен, что это не потому, что камера была перемещена, так как я пытался много раз.
Я не знаю, в чем проблема, спасибо за ваше предложение.
А код ниже (на python).
self.retval, self.rvec, self.tvec = aruco.estimatePoseBoard(self.corners, self.ids, board, self.cameraMatrix, self.distanceCoefficients)
self.dst, jacobian = cv2.Rodrigues(self.rvec)
self.rvec_trs = self.dst.transpose()
self.worldPos = - self.rvec_trs * self.tvec
self.worldPos = [self.worldPos[0][0],self.worldPos[1][1], self.worldPos[2][2]]