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

OpenCV摄像头添加文字报错求助:putText参数错误排查

解决OpenCV putText报错问题

原始代码

import cv2

cap = cv2.VideoCapture(0)

while True:
    img = cap.read()
    cv2.putText(img, "C", (100, 50), cv2.FONT_HERSHEY_PLAIN, 5, (0, 255, 0), 5)
    cv2.imshow("PutText", img)
    cv2.waitKey(1)

报错信息

Traceback (most recent call last):
  File "D:\IT\CV_project\PutText.py", line 8, in <module>
    cv2.putText(img, "C", (100, 50), cv2.FONT_HERSHEY_PLAIN, 5, (0, 255, 0), 5)
cv2.error: OpenCV(4.9.0) :-1: error: (-5:Bad argument) in function 'putText'
> Overload resolution failed:
>  - img is not a numerical tuple
>  - Expected Ptr<cv::UMat> for argument 'img'

问题分析

错误根源是cap.read()的返回值处理错误。cap.read()会返回两个值:第一个是布尔值success(标记帧是否读取成功),第二个才是实际的帧图像img。仅获取单个值会导致img变成包含布尔值和图像的元组,而非OpenCV函数所需的图像矩阵,因此触发参数错误。

修正后的代码

import cv2

cap = cv2.VideoCapture(0)

while True:
    # 正确读取返回的两个值
    success, img = cap.read()
    # 检查帧读取状态,避免无效图像导致后续报错
    if not success:
        break
    cv2.putText(img, "C", (100, 50), cv2.FONT_HERSHEY_PLAIN, 5, (0, 255, 0), 5)
    cv2.imshow("PutText", img)
    # 按下q键退出循环,保证程序可正常关闭
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
# 释放摄像头资源并关闭所有窗口
cap.release()
cv2.destroyAllWindows()

修正说明

  • 调整cap.read()的赋值语句,同时获取success和img两个返回值,确保img是有效的图像矩阵
  • 添加帧读取成功判断,避免读取失败时后续代码报错
  • 增加退出逻辑和资源释放代码,让程序可以正常终止并释放硬件资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:42:42