TypeError:python中需要一个整数(获取的类型为str)



我正在Python中使用OpenCV ArUco。我正在尝试生成不同目录的多个代码。为了在一次内生成它,我在循环中使用这个函数。例如list1=[1,2,3,4],comb=[501002501000],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)

如何解决此错误。请帮助

字符串"aruco.DICT_4X4_1000"aruco中的属性aruco.DICT_4X4_1000不同。

如果要以编程方式访问属性DICT_4X4_1000aruco的值,可以使用:

getattr(aruco, "DICT_4X4_1000")

所以你获取path的代码应该是:

...
path = getattr(aruco, dictionary)
...

正如我在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)
# ...
# ...

最新更新