แน่นอนมันเป็นข้อผิดพลาดในฟังก์ชั่น Rodrigues ...
หากคุณอ่านเอกสารที่เกี่ยวข้องคุณอาจเห็นว่าcv2.Rodrigues
มีอินเตอร์เฟซที่แตกต่างกัน 2 รายการ:
อันที่เลียนแบบอินเตอร์เฟส C ++ โดยที่เวกเตอร์การหมุน (และเป็นตัวเลือกจาโคเบียน) ถูกส่งผ่านโดยการอ้างอิงและแก้ไขโดยฟังก์ชัน
cv2.Rodrigues(src, dst[, jacobian]) --> None
และอีกหนึ่ง (Pythonic เพิ่มเติม) ที่เวกเตอร์การหมุนและจาโคเบียนกลับมาเป็น tuple
cv2.Rodrigues(src) --> dst, jacobian
หากคุณใช้อินเตอร์เฟสแรก pb จะหายไป ...
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()
ผลลัพธ์:
[0. 0. 0.]
[0. 0. 0.]
แก้ไขหลังจากทำการสอบสวนเพิ่มเติม:
ฟังก์ชั่นนี้เป็นรถบั๊กกี้มากขึ้นตามที่คาดไว้: เมื่อใช้อินเทอร์เฟซแรกพารามิเตอร์dst
และjacobian
ไม่ได้รับการแก้ไขซึ่งอยู่ใน contracdiction ทั้งหมดด้วย docstring:
>>> 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.
กล่าวอีกนัยหนึ่งสิ่งนี้ต้องการรายงานข้อผิดพลาดอย่างชัดเจน ...