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

Python OpenCV检测二维码时cv2.line函数参数类型报错如何解决

错误根因

报错和你修改cv2_imshow为cv2.imshow无直接关联,触发错误的代码是cv2.line行:
cv2.QRCodeDetector.detectAndDecode返回的points是float32类型的numpy数组,即使你通过tuple()做了类型转换,元组内的坐标值仍然是浮点数。OpenCV 4.5+版本对绘图接口的参数类型做了严格校验,cv2.line要求传入的点坐标必须是整数组成的元组,浮点类型会触发类型不匹配错误。
另外你原有代码的遍历逻辑也存在问题:points的维度为(检测到的二维码数量, 4, 2),直接取len(points)得到的是二维码总数而非单个二维码的角点数量,仅检测1个二维码时只会绘制1条边,无法框出完整二维码。

解决方案
  • 第一步:统一转换坐标为整数类型
    在进入points非空判断后,先对points做整数转换,不需要修改后续绘图代码:
points = points.astype(int)

也可以直接在cv2.line行对单个坐标做转换:
cv2.line(image, tuple(map(int, points[i][0])), tuple(map(int, points[nextPointIndex][0])), (255,0,0), 5)

  • 第二步:修正角点遍历逻辑
    调整循环逻辑,遍历每个二维码的四个角点绘制边框:
for qr in points:
    for i in range(4):
        next_idx = (i+1) % 4
        cv2.line(image, tuple(qr[i]), tuple(qr[next_idx]), (255,0,0), 5)
  • 第三步:适配本地IDE的图像显示逻辑
    Jupyter、Spyder默认不支持OpenCV自带的GUI窗口渲染,使用cv2.imshow容易出现无响应、窗口闪退问题,更稳妥的方案是改用matplotlib显示图像:
import matplotlib.pyplot as plt
# OpenCV默认读取为BGR格式,转换为RGB适配matplotlib
plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.axis('off')
plt.show()

如果你坚持使用cv2.imshow,请确认你安装的是opencv-python而非无GUI组件的opencv-python-headless版本。

修改后完整可运行代码
import cv2
import matplotlib.pyplot as plt

image = cv2.imread('/content/Screen Shot 2021-11-10 at 3.30.16 PM.png')
qrCodeDetector = cv2.QRCodeDetector()
decodedText, points, _ = qrCodeDetector.detectAndDecode(image)

if points is not None:
    # 坐标转整数
    points = points.astype(int)
    # 遍历所有检测到的二维码
    for qr_points in points:
        # 绘制四个边
        for i in range(4):
            nextPointIndex = (i+1) % 4
            cv2.line(image, tuple(qr_points[i]), tuple(qr_points[nextPointIndex]), (255,0,0), 5)
    print(decodedText)    
    # 用matplotlib显示图像
    plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
    plt.axis('off')
    plt.show()

else:
    print("QR code not detected")

内容的提问来源于stack exchange,提问作者CalebDunham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:45:03