error: (-215:Assertion failed) id < bytesList.rows in function 'drawMarker'
error: (-215:Assertion failed) id < bytesList.rows in function 'drawMarker'
这是生成 4 个具有给定 ID 的 aruco 标记并将其保存到同一文件夹中的代码。这是当我 运行 生成多个 aruco 标记的相同函数时出现的错误
import numpy
import cv2
import cv2.aruco as aruco
i=1
def aruco_gen(id_aruco, num_pixels):
global i
aruco_dict = aruco.Dictionary_get(aruco.DICT_4X4_50)
print(i)
img = aruco.drawMarker(aruco_dict, id_aruco, num_pixels)
cv2.imshow('frame',img)
cv2.imwrite('ArUco'+str(id_aruco)+'.jpg',img)
i=i+1
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == "__main__":
aruco_dict={0:[10,400],1:[49,400],2:[74,400],3:[190,400],4:[180,400]}
for ar_id,ar_arg in aruco_dict.items():
id_aruco =aruco_dict[ar_id][0]
num_pixels=aruco_dict[ar_id][1]
aruco_gen(id_aruco,num_pixels)
print(id_aruco,num_pixels,ar_id)
这是我在 运行 程序
时遇到的错误
1
10 400 0
2
49 400 1
3
Traceback (most recent call last): File "/home/mighty/Task1.1_test.py", line 98, in
aruco_gen(id_aruco,num_pixels) File "/home/mighty/Task1.1_test.py", line 67, in aruco_gen
img = aruco.drawMarker(aruco_dict, id_aruco, num_pixels) cv2.error: OpenCV(3.4.2)
/io/opencv_contrib/modules/aruco/src/dictionary.cpp:169: error:
(-215:Assertion failed) id < bytesList.rows in function 'drawMarker'
[Finished in 1.7s with exit code 1] [shell_cmd: /usr/bin/env python3 /home/mighty/Task1.1_test.py] [dir: /home/mighty/] [path:
/home/mighty/bin:/home/mighty/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin]
所以,答案如下:
首先,我认为您对字典的定义是错误的 - 请尝试使用以下内容:
aruco_dict = aruco.getPredefinedDictionary(aruco.DICT_4X4_50)
第二个是DICT_4X4_50
限制为id<=50(不确定是从0还是1开始)
改变
aruco.DICT_4X4_50
至
aruco.DICT_4X4_250
在您的情况下,您使用的是 10,49,74,190,180。当您尝试 74 时它崩溃了。
我没有测试 python,但 运行 遇到了 c++ 中的类似问题,这就是解决方法。
这是生成 4 个具有给定 ID 的 aruco 标记并将其保存到同一文件夹中的代码。这是当我 运行 生成多个 aruco 标记的相同函数时出现的错误
import numpy
import cv2
import cv2.aruco as aruco
i=1
def aruco_gen(id_aruco, num_pixels):
global i
aruco_dict = aruco.Dictionary_get(aruco.DICT_4X4_50)
print(i)
img = aruco.drawMarker(aruco_dict, id_aruco, num_pixels)
cv2.imshow('frame',img)
cv2.imwrite('ArUco'+str(id_aruco)+'.jpg',img)
i=i+1
cv2.waitKey(0)
cv2.destroyAllWindows()
if __name__ == "__main__":
aruco_dict={0:[10,400],1:[49,400],2:[74,400],3:[190,400],4:[180,400]}
for ar_id,ar_arg in aruco_dict.items():
id_aruco =aruco_dict[ar_id][0]
num_pixels=aruco_dict[ar_id][1]
aruco_gen(id_aruco,num_pixels)
print(id_aruco,num_pixels,ar_id)
这是我在 运行 程序
时遇到的错误 1
10 400 0
2
49 400 1
3
Traceback (most recent call last): File "/home/mighty/Task1.1_test.py", line 98, in aruco_gen(id_aruco,num_pixels) File "/home/mighty/Task1.1_test.py", line 67, in aruco_gen img = aruco.drawMarker(aruco_dict, id_aruco, num_pixels) cv2.error: OpenCV(3.4.2) /io/opencv_contrib/modules/aruco/src/dictionary.cpp:169: error: (-215:Assertion failed) id < bytesList.rows in function 'drawMarker'
[Finished in 1.7s with exit code 1] [shell_cmd: /usr/bin/env python3 /home/mighty/Task1.1_test.py] [dir: /home/mighty/] [path: /home/mighty/bin:/home/mighty/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin]
所以,答案如下:
首先,我认为您对字典的定义是错误的 - 请尝试使用以下内容:
aruco_dict = aruco.getPredefinedDictionary(aruco.DICT_4X4_50)
第二个是DICT_4X4_50
限制为id<=50(不确定是从0还是1开始)
改变
aruco.DICT_4X4_50
至
aruco.DICT_4X4_250
在您的情况下,您使用的是 10,49,74,190,180。当您尝试 74 时它崩溃了。
我没有测试 python,但 运行 遇到了 c++ 中的类似问题,这就是解决方法。