为了账号安全,请及时绑定邮箱和手机立即绑定

cv2.rectangle() 调用重载方法,虽然我给出了其他参数

cv2.rectangle() 调用重载方法,虽然我给出了其他参数

有只小跳蛙 2022-07-05 18:58:41
cv2.rectangle 有两种调用方式:img = cv.rectangle(img, pt1, pt2,颜色[, 厚度[, lineType[, shift]]])img = cv.rectangle(img,rec,颜色[,厚度[,线型[,移位]]]来源:https ://docs.opencv.org/4.1.2/d6/d6e/group__imgproc__draw.html#ga07d2f74cadcf8e305e810ce8eed13bc9我将矩形称为如下:cv2.rectangle(img=cv2_im, pt1=a, pt2=b, 颜色=(0, 255, 0), 厚度=3, lineType=cv2.LINE_AA)错误信息:cv2.rectangle(img=cv2_im, pt1=a, pt2=b, color=(0, 255, 0), 厚度=3, lineType=cv2.LINE_AA) TypeError: rectangle() 缺少必需的参数 'rec' (pos 2 )我不明白为什么应用程序会尝试调用该方法的重载版本。U 明确定义版本 1 调用。我尝试用 (x,y) 等更改变量 a ,但它不起作用。正确的方法调用仅在我第一次调用 retangle() 之后才有效,它希望我使用它的重载版本。Python 3.7.5 64 位枕头 7.0.0numpy 1.18.1opencv-contrib-python 4.1.2.30imgname='fly_1.jpg'   im = Image.open(imgname)cv2_im = np.array(im)#x,y,w,h aus Image Labelerbox= [505.54, 398.334, 1334.43, 2513.223]x,y,w,h = boxa = (x, y)b = (x+w, y+h)#First rectanglecallcv2.rectangle(img=cv2_im, pt1=a, pt2=b, color=(0, 255, 0), thickness=3, lineType=cv2.LINE_AA)#calls two cv2 methods which shouldn't influence rectanglerects = getRegionProposals(im,'f',normalized=True)   for i,rect in enumerate(rects):     x, x_max, y, y_max = rect     a = (x*width,y*height)     b = (x_max*width, y_max*height)     if (IoU is not False and IoU > 0.5):         #second and further calls         cv2.rectangle(img=cv2_im, pt1=a, pt2=b, color=(0, 255, 0), thickness=3, lineType=cv2.LINE_AA)在第二次调用之间,我使用了 cv2 选择性搜索并设置了以下内容: cv2.setUseOptimized(True) cv2.setNumThreads(4)希望你们看到我做错了什么。
查看完整描述

3 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

好吧,在昨天解决这个问题几个小时之后,我现在才发现这很遗憾......

元组中的值是浮点数。

> a = (x*width,y*height) b = (x_max*width, y_max*height)

在将它们更改为 int 并丢失逗号后的值后,它可以工作。

a = (int(x*width),int(y*height))


查看完整回答
反对 回复 2022-07-05
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

我也发现自己有这个cv2.rectangle()错误。尝试了以上所有方法:


# Data types were ok:

# int for coordinates

# float32 for the image

>>> pt1 = (x, y)

>>> print(pt1)

(4, 10)

>>> print(image.dtype)

'float32'

但我仍然有错误。发生的事情是我正在构建一个 RGB 图像,并以这种方式将其更改为 BGR:


# Image from RGB to BGR

image = image[:, :, ::-1]

问题是这个操作返回了同一个数组的一个新视图(它不会改变它的内部存储方式)。因此,要真正将图像通道从 RGB 置换为 BGR,您需要使用 opencv 进行:


# Image from RGB to BGR

image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)

这解决了这个问题,因为该操作改变了图像数组内部存储结构,因此 opencv 可以使用它。


查看完整回答
反对 回复 2022-07-05
?
噜噜哒

TA贡献1784条经验 获得超7个赞

我在使用时遇到了同样的错误cv2.rectangle()。我发现我的代码中的坐标值之一是浮点数。所以我通过类型转换解决了它。让我们假设您的情况pt1分别pt2是 (1.5,2) 和 (2,6.5)。因此,您可以简单地将值转换为整数。

pt1=(int(1.5),2)
pt2=(2,int(6.5))

我希望它对你有帮助。


查看完整回答
反对 回复 2022-07-05
  • 3 回答
  • 0 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信