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
相关产品推荐
相关产品推荐

