最近用yolo做目标检测的时候测试碰到了一个奇葩的报错:

cv2.error: OpenCV(4.5.2) :-1: error: (-5:Bad argument) in function 'pointPolygonTest'
> Overload resolution failed:
>  - Can't parse 'pt'. Sequence item with index 0 has a wrong type
>  - Can't parse 'pt'. Sequence item with index 0 has a wrong type
...
...

搜了各种问题,有人说cv2版本问题不兼容,但是卸载重新装了后依旧报错;有人说报错因为一张图里出现多个目标检测内容所以报错巴拉巴拉,但依旧没啥用。。。

直到刷到这个博主的解决方案,救了大命了,再次一万个感谢!

参考链接:

> Overload resolution failed:> - Can‘t parse ‘pt‘. Sequence item with index 0 has a wrong type_can't parse 'pts'. sequence item with index 0 has -CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/long_songs/article/details/124736338以我的报错区域举个例子,下面是原代码报错行:

cv2.rectangle(img, (x1,y1), (np.float32(c3[0]), np.float32(c3[1])), rgb, -1)
img = cv2.putText(img, msg, (c1[0], np.float32(c1[1] - 2)), cv2.FONT_HERSHEY_SIMPLEX,0.7, (0,0,0), bbox_thick//2,lineType=cv2.LINE_AA)
            

原因其实是cv2这个版本无法绘制float型的图,只能绘制int型,所以把所有的数字部分全部类型转化为int()型即可,那么修改后的代码如下:

cv2.rectangle(img, (x1, y1), (int(np.float32(c3[0])), int(np.float32(c3[1]))), rgb, -1)
img = cv2.putText(img, msg, (c1[0], int(np.float32(c1[1] - 2))), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 0),bbox_thick // 2, lineType=cv2.LINE_AA)

完美解决。成功输出结果。

此类报错提示都可以优先考虑数据类型原因,基本全改为int()类型即可。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐