TypeError:Python中需要一个整数(类型为str)

时间:2018-11-11 18:24:29

标签: python opencv augmented-reality aruco

我正在Python中使用OpenCV ArUco。我正在尝试生成不同目录的多个代码。为了一次生成它,我在循环中使用此函数。例如list1 = [1,2,3,4],comb = [50,100,250,1000],ids = [1,22,3,45]

def generator(bsize,comb,ids):

    bitsize = [bsize]+['X']+[bsize]
    bitz = ''.join(bitsize)

    dicts = ['DICT']+[bitz]+[comb]
    dictionary = '_'.join(dicts)
    print(dictionary)

    path = ['aruco']+[dictionary]
    print(path)
    path = '.'.join(path)
    print(path)

    aruco_dict = aruco.Dictionary_get(path)
    img = aruco.drawMarker(aruco_dict, ids, bsize)
    cv2.imshow('frame',img)

for i in range(0,7):
    generator(list1[i],list2[i],list3[i])

“路径”的输出为:

aruco.DICT_4X4_1000

此后我遇到错误:

line 35, in generator
aruco_dict = aruco.Dictionary_get(path)
TypeError: an integer is required (got type str)

如何解决此错误。请帮助

2 个答案:

答案 0 :(得分:0)

"aruco.DICT_4X4_1000"是一个字符串,不同于aruco.DICT_4X4_1000中的属性aruco

如果您要通过编程方式访问属性aruco的{​​{1}}的值,请can use

DICT_4X4_1000

因此您获取getattr(aruco, "DICT_4X4_1000") 的代码应为:

path

答案 1 :(得分:0)

正如我在http://www.philipzucker.com/aruco-in-opencv/看到的那样,aruco.DICT_6X6_250是实常数(int)。在你的罐中,它是一个字符串"aruco.DICT_6X6_250",这是错误的主要原因。为了澄清起见,只需尝试使用以下2条语句代替path = '.'.join(path)

  • 有效

    path = aruco.DICT_4X4_1000

  • 无效

    path = "aruco.DICT_4X4_1000"

  

您会发现,第二个错误负责。

我建议解决此问题的方法是创建一个名为 arcuo_constants.py 的模块,并将其内容如下所示。

  

arcuo_constants.py

import cv2
import cv2.aruco as aruco

# define all possible constants here
ARUCO_CONSTANTS = {
    "aruco.DICT_6X6_250": aruco.DICT_6X6_250,
    "aruco.DICT_4X4_1000": aruco.DICT_4X4_1000
}

最后,在代码文件中,您可以按以下方式导入和使用这些值(假设模块文件位于同一目录中)。

import aruco_constants

ARUCO_CONSTANTS = aruco_constants.ARUCO_CONSTANTS # A dictionary
# ...
# ...
path = '.'.join(path)
path = ARUCO_CONSTANTS[path]
aruco_dict = aruco.Dictionary_get(path)
# ...
# ...