TypeError:在python中需要一个整数(get type str)

2024-06-16 09:00:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在Python中使用opencvaruco。我正在尝试生成不同目录的多个代码。为了在一次内生成它,我在一个循环中使用这个函数。例如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])

“path”的输出是:

^{pr2}$

在那之后,我得到了错误:

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

如何解决此错误。请帮忙


Tags: pathidsdictionarygeneratordictprintjoincomb
2条回答

正如我在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"

You'll find, the 2nd one is responsible for error.

我建议解决这类问题的方法是创建名为arcuo的任何模块_常量.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
}

最后,让你在文件中使用相同的值。在

^{pr2}$

"aruco.DICT_4X4_1000"是一个字符串,它与aruco中的属性aruco.DICT_4X4_1000不同。在

如果要以编程方式访问属性aruco的值,can use

getattr(aruco, "DICT_4X4_1000")

因此,获取path的代码应该是:

^{pr2}$

相关问题 更多 >