';TypeError:参数的标量值';颜色';不是数字';使用opencv python绘制圆时

';TypeError:参数的标量值';颜色';不是数字';使用opencv python绘制圆时,python,numpy,opencv,Python,Numpy,Opencv,我是opencv新手。当我画圆时发生了一些奇怪的事情。当我试图将c2传递给圆函数时,它不起作用,但当我将c1传递给颜色参数时,它工作得很好。但是c1==c2 这是我的密码: import cv2 import numpy as np canvas = np.zeros((300, 300, 3), dtype='uint8') for _ in range(1): r = np.random.randint(0, 200) center = np.random.randint

我是opencv新手。当我画圆时发生了一些奇怪的事情。当我试图将c2传递给圆函数时,它不起作用,但当我将c1传递给颜色参数时,它工作得很好。但是c1==c2

这是我的密码:

import cv2
import numpy as np 

canvas = np.zeros((300, 300, 3), dtype='uint8')
for _ in range(1):
    r = np.random.randint(0, 200)
    center = np.random.randint(0, 300, size=(2, )) 
    color = np.random.randint(0, 255, size=(3, ))
    c1 = tuple(color.tolist())
    c2 = tuple(color)
    print('c1 == c2 : {} '.format(c1 == c2))
    cv2.circle(canvas, tuple(center), r, c2, thickness=-1)

cv2.imshow('Canvas', canvas)
cv2.waitKey(0)
当我使用c2时,控制台会打印:“TypeError:参数'color'的标量值不是数字”,但为什么在c1==c2时会出现这种情况?谢谢。

  • 将数据类型int64转换为int
  • :数据项通过函数转换为最接近的兼容内置Python类型
Ex.

import cv2
import numpy as np 

canvas = np.zeros((300, 300, 3), dtype='uint8')
for _ in range(1):
    r = np.random.randint(0, 200)
    center = np.random.randint(0, 300, size=(2, )) 
    color = np.random.randint(0, 255, size=(3, ))

    #convert data types int64 to int
    color = ( int (color [ 0 ]), int (color [ 1 ]), int (color [ 2 ])) 
    cv2.circle(canvas, tuple(center), r, tuple (color), thickness=-1)


cv2.imshow('Canvas', canvas)
cv2.waitKey(0)

您可以打印c1或c2(不是等号)并查看它们是什么。谢谢您的回答。它在您的方式下工作得很好。但是,当它们都接收相同的元组类型时,为什么元组(中间)不需要任何额外的处理就可以工作。@邱宏洛颜色是三种基本BGR颜色的组合,使用的值范围为0到255(int-type)对于每个组件。中心是圆的坐标。坐标表示为两个值的元组,即(X坐标值、Y坐标值)。