由于 objPoints 类型,对 aruco 标记使用 board_create 时出错

Error using board_create for aruco markers due to objPoints type

我希望能够检测 3D 对象上的 aruco 标记,因此我尝试在 OpenCV 中使用标记的位置创建我自己的自定义 aruco 板。

我制作了一段代码来重现错误。

# Load the ArUco dictionary
arucoDict = cv2.aruco.Dictionary_get(cv2.aruco.DICT_4X4_50)
arucoParams = cv2.aruco.DetectorParameters_create() 

#Create new custom aruco board
board_corners = [np.array([[0.007,0.096,0.0],[0.099,0.096,0.0],[0.099,0.005,0.0],[0.007,0.005,0.0]],dtype=np.float32),
np.array([[0.0,0.099,0.006],[0.0,0.005,0.006],[0.0,0.005,0.096],[0.0,0.099,0.096]],dtype=np.float32),
np.array([[0.007,0.0,0.006],[0.099,0.0,0.006],[0.099,0.0,0.097],[0.007,0.0,0.097]],dtype=np.float32),
np.array([[0.007,0.096,0.103],[0.007,0.005,0.103],[0.099,0.005,0.103],[0.099,0.096,0.103]],dtype=np.float32)]

#Id's for aruco marker on board
board_ids = np.array([[0],[1],[2],[3]], dtype=np.int32)

#Creating board
board = cv2.aruco.Board_create(board_corners,arucoDict, board_ids )

产生以下错误

cv2.error: /build/opencv-L2vuMj/opencv-3.2.0+dfsg/contrib/modules/aruco/src/aruco.cpp:1281: error: (-215) objPoints.type() == CV_32FC3 in function create

据我了解,当数据类型不是函数要求的 float32 时,就会发生错误。但是我已经将数据类型更改为 np.float32,我不确定为什么我仍然会收到错误。

希望有人知道我错过了什么。

我设法自己解决了这个问题。问题是我 运行 的 OpenCV 版本太旧了。版本需要是 3.4.x 或更高版本,因为它是一个在 3.4.

中修复的错误