OpenCV升级到1.5.2后调用cv2.circle报整数标量数组转换错误如何解决
OpenCV版本升级后cv2.circle调用报错问题分析与修复
错误成因
- 核心原因是OpenCV 1.5.2版本对绘图接口的参数类型校验比1.4.1严格很多:1.4.x版本中传入浮点型的坐标参数时,OpenCV会自动隐式转换为整数,而1.5.x版本要求绘图坐标必须显式为整数类型,否则直接抛出类型错误。
- 你代码中
detector.findDistance返回的lineInfo里存储的坐标值(第4、5位)是浮点型的计算结果,直接传入cv2.circle时不符合新版本的参数要求。 - 补充说明:如果
lineInfo的元素是numpy浮点数组类型,也会触发同样的报错,本质都是类型不匹配。
修复方案
方案1(推荐,修改成本最低)
直接在调用cv2.circle时把坐标参数强转为整数,修改后的代码如下:
if fingers[1] == 1 and fingers[2] == 1: # 9. Find distance between fingers length, img, lineInfo = detector.findDistance(lmList[8], lmList[12], img) # 10. Click mouse if distance short if length < 40: # 仅修改此行,把坐标转为int cv2.circle(img, (int(lineInfo[4]), int(lineInfo[5])), 15, (0, 255, 0), cv2.FILLED) autopy.mouse.click()
方案2(全局统一修复)
如果你可以修改detector.findDistance方法的实现,直接在方法内部返回lineInfo时,就把所有坐标值转换为整数类型,后续所有调用该方法的地方都不需要单独修改。
额外注意
如果项目中还有其他调用cv2.line、cv2.rectangle、cv2.putText等绘图接口的地方,遇到相同报错时,都可以用同样的方式把坐标参数转为整数即可解决。
内容的提问来源于stack exchange,提问作者LaukyS
相关产品推荐
相关产品推荐

