You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:06:08