Chắc chắn, đó là một lỗi trong chức năng Coleues ...
Nếu bạn đọc tài liệu tương ứng , bạn có thể thấy cv2.Rodrigues
có 2 giao diện khác nhau:
một giao diện bắt chước giao diện C ++, trong đó vectơ xoay (và tùy chọn jacobian) được truyền bằng tham chiếu và được sửa đổi bởi hàm
cv2.Rodrigues(src, dst[, jacobian]) --> None
và một (thêm Pythonic) trong đó vectơ xoay và jacobian được trả về dưới dạng một tuple
cv2.Rodrigues(src) --> dst, jacobian
Nếu bạn sử dụng giao diện đầu tiên, pb sẽ biến mất ...
import numpy as np
import cv2
def changes():
rmat=np.eye(4)
tvec=np.zeros(3)
#(rvec, jacobian)=cv2.Rodrigues(rmat)
cv2.Rodrigues(rmat, tvec)
print(tvec)
for i in range(2):
changes()
Kết quả:
[0. 0. 0.]
[0. 0. 0.]
EDIT sau khi điều tra thêm:
Chức năng thậm chí còn nhiều lỗi hơn như mong đợi: khi sử dụng giao diện, tham số đầu tiên dst
vàjacobian
không được sửa đổi, đó là hoàn toàn tránh thai với chuỗi doc:
>>> help(cv2.Rodrigues)
Help on built-in function Rodrigues:
Rodrigues(...)
Rodrigues(src[, dst[, jacobian]]) -> dst, jacobian
. @brief Converts a rotation matrix to a rotation vector or vice versa.
.
. @param src Input rotation vector (3x1 or 1x3) or rotation matrix (3x3).
. @param dst Output rotation matrix (3x3) or rotation vector (3x1 or 1x3), respectively.
. @param jacobian Optional output Jacobian matrix, 3x9 or 9x3, which is a matrix of partial
. derivatives of the output array components with respect to the input array components.
Nói cách khác, điều này rõ ràng đòi hỏi một báo cáo lỗi ...