我想在每个框上用不同颜色绘制一个框。所以我写了一个简单的代码,像这样:
import cv2
import numpy as np
image = cv2.imread(image_path)
thickness = 2
for i in range(len(x1)):
start_point = (x1[i],y1[i])
end_point = (x2[i],y2[i])
color = list(np.random.randint(0,255,[3,]))
cv2.rectangle(image, start_point, end_point, color, thickness)
并且它引发了一个错误
TypeError: an integer is required (got type list)
。然后我将color = list(np.random.randint(0,255,[3,]))
更改为color = [0,0,0]
,结果是正常的。因此,我检查一下:color1 = list(np.random.randint(0,255,[3,]))
color2 = [0,0,0]
print(color1,color2)
print(type(color1), type(color2))
它是相同的值和相同的类型。
>> [111, 61, 27] [0, 0, 0]
>> <class 'list'> <class 'list'>
这个问题真的让我感到困惑,如果您知道为什么,请帮助我。
最佳答案
问题似乎是rectangle
函数的np.int64类型有问题。如果尝试使用print(type(color1[0]), type(color2[0]))
,您会发现它们的类型不同,一种是<class 'numpy.int64'>
,另一种是<class 'int'>
。要使用随机函数,您需要将整数转换为python整数,添加以下内容可能会有助于color = [int(i) for i in color]
。这将绘制矩形并且不会引发任何错误