首页 > 解决方案 > 使用 np 数组中的元组作为颜色时,cv2.rectangle 不起作用

问题描述

我试图在脚本中使用随机颜色制作矩形,但我遇到了这个非常奇怪的错误,当我使用硬编码颜色时,一切正常(如(255、0、0)),但是当我尝试使用 np.random.randint 制作随机颜色,它给了我以下错误:

TypeError:函数只需要 4 个参数(给定 2 个)

这个最小的代码重现了我的问题。

import numpy as np
from cv2 import cv2
    
img = np.ones((900, 1200), dtype='uint8')
color = tuple(np.random.randint(0, 256, 3, dtype='uint8')) # Does not work
color = (127, 127, 127) # Works
cv2.rectangle(img, (100, 100), (300, 300), color, 4)

标签: pythonopencv

解决方案


这确实是奇怪的行为,但以下内容适用于您的情况:

编辑:克里斯托夫的评论是正确的。您只需调用tolist()即可将颜色转换为 python 标量。

例子:

import numpy as np
import cv2

img = np.ones((900, 1200), dtype='uint8')
color = np.random.randint(0, 256, 3, dtype=np.uint8)

cv2.rectangle(img, (100, 100), (300, 300), color.tolist(), 4)

cv2.imshow("Test", img)
cv2.waitKey()

输出:

输出jpg


推荐阅读