NameError: name 'showimg'未定义求助(USB摄像头拍照代码)
「NameError: name 'showimg' is not defined」错误根源分析
你提供的代码存在多处语法和逻辑问题,直接导致了showimg未定义的错误,具体原因如下:
核心问题:缩进错误导致代码逻辑断裂
Python依赖缩进划分代码块,你的takePicture()函数内代码缩进完全混乱:
global showimg之后的代码没有正确缩进,导致这些代码不属于函数体,showimg=frame这行不会在调用takePicture()时执行,函数内自然找不到showimg的定义。- 即使缩进修正,
return image语句写在函数中间,会直接终止函数执行,后面的cv2.imshow('img1',showimg)等代码永远不会被运行,showimg也无法被调用到。
其他连带问题(会引发更多错误)
- 变量定义顺序颠倒:
image在return语句之后才赋值,return image会直接抛出「image未定义」的新错误;img在cv2.imshow('image', img)之后才定义,同样会报错。 - 无效代码:
img = cv2.imread('no-such-file.jpg', 0)读取不存在的文件,会返回None,后续调用也会出错;cap.release()放在函数末尾,但如果函数提前return,摄像头资源无法正常释放。 cap.read()使用错误:该方法返回两个值(读取成功标记、帧数据),你只接收了一个值,会导致frame是一个元组而非图像数据。
修正后的代码示例(供参考)
# new camera code import cv2 import time # 初始化摄像头 cap = cv2.VideoCapture(0) # 等待摄像头启动 time.sleep(0.3) def takePicture(): global showimg # 读取摄像头帧,正确接收返回值 ret, frame = cap.read() if not ret: print("无法读取摄像头画面") return None showimg = frame # 显示画面 cv2.imshow('captured image', showimg) cv2.waitKey(1) # 保存图片 save_path = 'C:/Users/whale/Desktop/REMOVE/capture.png' cv2.imwrite(save_path, frame) print(f"图片已保存至:{save_path}") # 释放资源并关闭窗口 cap.release() cv2.destroyAllWindows() return showimg print(takePicture())
内容的提问来源于stack exchange,提问作者Smit Khandelwal
相关产品推荐
相关产品推荐

