如果我运行:
import numpy as np
import cv2
def changes():
rmat=np.eye(4)
tvec=np.zeros(3)
(rvec, jacobian)=cv2.Rodrigues(rmat)
print rvec
for i in range(2):
changes()
我得到:
[[6.92798859e-310]
[2.19380404e-316]
[1.58101007e-322]]
[[0.]
[0.]
[0.]]
所以changes()
变化的结果。
我不明白为什么会这样,而且如果tvec=np.zeros(3)
注释掉该行,它就会停止更改 ,这让我觉得这是系统中的错误。
“ e-310”是非常接近0的浮点数。这看起来像是python浮点数表示法的普遍问题,它在每次内存分配上都会有所不同。
—
Aryerez '19
这真是太不可思议了……对我来说也像个虫子。
—
朱利安(Julien)
IMO的主要内容是,将tvec定义为数组(而不是int或字符串)根本没有效果。一旦完成,就不会回头...我的猜测是tvec是内部状态不应被篡改的cv2.Rodrigues,但该界面似乎允许这种副作用的产生……
—
Julien
这很混乱。如果展开循环,则将结果存储
—
怠惰
np.zeros(3)
在两个不同的变量中时它将起作用。如果我不存储结果或两次使用相同的变量,则不会。也许有些麻木的人可以对此有所启发。
仅供参考,我在Windows上的Python3中看到了同样的事情……
—
Julien