错误:(-215:声明失败)id <bytesList.rows,位于函数“ drawMarker”中

时间:2018-11-12 20:19:29

标签: python python-3.x opencv aruco

这是生成具有给定id的4个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
  

回溯(最近一次通话最后一次):文件“ /home/mighty/Task1.1_test.py”,位于第98行       aruco_gen(id_aruco,num_pixels)文件“ /home/mighty/Task1.1_test.py”,第67行,在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:错误:   (-215:断言失败)id      

[在1.7秒内完成,退出代码为1] [shell_cmd:/ usr / bin / env python3 /home/mighty/Task1.1_test.py] [dir:/ home / mighty /] [路径:   /home/mighty/bin:/home/mighty/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/游戏:/ usr / local / games // snap / bin]

2 个答案:

答案 0 :(得分:0)

因此,答案如下:
首先,我认为您对字典的定义是错误的-尝试使用以下命令:

aruco_dict = aruco.getPredefinedDictionary(aruco.DICT_4X4_50)

第二件事是DICT_4X4_50仅限于 id <= 50 (不确定从0还是1开始)。

答案 1 :(得分:0)

更改

    aruco.DICT_4X4_50  

    aruco.DICT_4X4_250

在您的情况下,您使用10,49,74,190,180。当您尝试74时,它崩溃了。

我没有测试python,但是在c ++中遇到了类似的问题,这就是解决方法。