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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:20:31