python - cv2.rectangle() 调用重载方法,虽然我给出了其他参数
问题描述
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.0
- numpy 1.18.1
opencv-contrib-python 4.1.2.30
imgname='fly_1.jpg' im = Image.open(imgname) cv2_im = np.array(im) #x,y,w,h aus Image Labeler box= [505.54, 398.334, 1334.43, 2513.223] x,y,w,h = box a = (x, y) b = (x+w, y+h) #First rectanglecall cv2.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 rectangle rects = 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)
希望你们看到我做错了什么。
解决方案
好吧,在昨天解决这个问题几个小时之后,我现在才发现这很遗憾......
元组中的值是浮点数。
> a = (x*width,y*height) b = (x_max*width, y_max*height)
在将它们更改为 int 并丢失逗号后的值后,它可以工作。
a = (int(x*width),int(y*height))
推荐阅读
- python - 调试功能未出现在 VS Code 的菜单栏中。我将它用于 Python
- python - Python 用 Pillow 对多个作物进行图像处理,并用 Bokeh 分组并显示在一行中
- android - Android Profiler:没有可调试的进程
- javascript - 如何使用 js map 格式化 API 响应数据?
- azure - 在 Azure 中使用不同的 nic 创建多个 VM
- ios - 当数组具有相似元素时合并数组
- r - 饼图中的标签、颜色和切片之间的错误同步
- assembly - 使用 MASM 的汇编语言中的中缀到后缀转换(对于 x86 处理器)
- c# - 使用c#从字符串中删除转义字符
- javascript - Ember 快速入门教程:解析错误:“@action”中出现意外字符“@”