我有2个3D点云,存储在numpy.ndarrays中,包含0或1(指示检测到的点或没有)。 我想计算转换'测试'的仿射变换。数组到'参考'阵列。
我这样称呼函数:
import numpy as np
from cv2 import estimateAffine3D
[...] Read in the Arrays [...]
print(np.shape(Reference))
print(np.shape(Test))
AffineTransfMatrix = estimateAffine3D(Reference,Test)
我得到的输出是:
(132, 2055, 701)
(132, 2055, 701)
OpenCV Error: Assertion failed (count >= 0 && to.checkVector(3) == count) in estimateAffine3D, file /home/wenzlern/libraries/opencv/modules/calib3d/src/ptsetreg.cpp, line 513
Traceback (most recent call last):
File "/home/wenzlern/code/python/AbsorbtionSpecAnalysis/AlignEnergies.py", line 67, in <module>
estimateAffine3D(Reference,Test)
cv2.error: /home/wenzlern/libraries/opencv/modules/calib3d/src/ptsetreg.cpp:513: error: (-215) count >= 0 && to.checkVector(3) == count in function estimateAffine3D
我尝试使用Reference / Test.astype(&#39; float32&#39;)来尝试使用数据类型,但无法更改结果。文档似乎没有指定特定的格式。(http://docs.opencv.org/2.4/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html#estimateaffine3d)。
有没有人知道会出现什么问题?我错过了什么,或者说错了功能吗?
非常感谢, 尼尔斯
答案 0 :(得分:1)
我发现,使用OpenCV 4.1.1时,将numpy数组的dtype设置为np.int64 时,也会为EstimateAffinePartial2D和estimateAffine2D提供类似的错误消息:
error: (-215:Assertion failed) count >= 0 && to.checkVector(2) == count in function 'estimateAffinePartial2D'
答案 1 :(得分:0)
用户Micka(在对问题的评论中)有正确的解决方案。数组必须以Nx3格式传递。 换一种说法: Point-Cloud中每个点的坐标(x,y,z)是要传递的Nx3矩阵中的一个1x3条目。
谢谢!