我想在每个框上用不同颜色绘制一个框。所以我写了一个简单的代码,像这样:

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]。这将绘制矩形并且不会引发任何错误

10-07 19:22
查看更多