निश्चित रूप से, यह रॉड्रिक्स फ़ंक्शन में एक बग है ...
यदि आप संबंधित डॉक को पढ़ते हैं , तो आप देख सकते हैं कि cv2.Rodrigues
2 अलग-अलग इंटरफेस हैं:
एक जो C ++ इंटरफ़ेस की नकल करता है, जहां रोटेशन वेक्टर (और वैकल्पिक जैकोबियन) को संदर्भ द्वारा पारित किया जाता है और फ़ंक्शन द्वारा संशोधित किया जाता है।
cv2.Rodrigues(src, dst[, jacobian]) --> None
और एक (अधिक पाइथोनिक) जहां रोटेशन वेक्टर और जेकोबियन को टुपल के रूप में वापस किया जाता है
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.]
आगे की जांच के बाद EDIT:
यह फ़ंक्शन अपेक्षा के अनुसार और भी अधिक छोटी है: पहले इंटरफ़ेस का उपयोग करते समय, पैरामीटर dst
और jacobian
संशोधित नहीं किए जाते हैं, जो कि डॉकस्ट्रिंग के साथ कुल विरोधाभास है:
>>> 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.
दूसरे शब्दों में, यह स्पष्ट रूप से एक बग रिपोर्ट की आवश्यकता है ...