Python3.8调用cv2.circle报类型错误 3.9环境运行正常
故障原因
报错指向cv2.circle的center圆心参数类型不匹配:OpenCV 4.5.5版本在Python 3.8环境下严格要求圆心坐标的两个值必须为整数类型,不会自动对浮点数、numpy浮点类数值做隐式整数转换。
你之前Python 3.9的Anaconda环境中安装的OpenCV版本类型校验更宽松,支持自动把浮点类坐标转成合法整数参数,所以程序可以正常运行。两个环境的OpenCV版本/构建版本不一致,是出现同代码不同运行结果的核心原因。
修复方案
两种方案选择任意一种即可解决问题:
- 代码层面显式做类型转换:直接修改
plot_new.py第221行的报错代码,把圆心坐标的两个值强制转成int类型:
原报错代码:
cv2.circle(im_with_pairs,tuple(point),10,magenta, thickness = 2)
替换为对应逻辑:
# point为普通列表/元组时用这行 cv2.circle(im_with_pairs, (int(point[0]), int(point[1])), 10, magenta, thickness=2) # point为numpy数组时用这行写法更简便 # cv2.circle(im_with_pairs, tuple(point.astype(int)), 10, magenta, thickness=2)
- 环境层面统一OpenCV版本:先在能正常运行的Python 3.9环境中执行
pip show opencv-python查询当前安装的OpenCV具体版本号,再到Python 3.8环境中执行pip install opencv-python==查询到的版本号安装完全一致的版本,不需要修改代码即可正常运行。
内容的提问来源于stack exchange,提问作者Daxter44
相关产品推荐
相关产品推荐

