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

如何修复OpenCV Python中“SystemError: <built-in function imshow> returned NULL...”错误

解决cv2.imshow()报错:SystemError: returned NULL without setting an error

嘿,这个问题其实一眼就能看出来——你把cv2.imshow()的参数顺序搞反啦!

OpenCV的imshow函数规则很明确:第一个参数必须是窗口名称(字符串类型),第二个参数才是要显示的图像对象。你现在写的cv2.imshow(img,'img')把图像放在了第一个位置,窗口名在后面,完全不符合函数的参数要求,这才导致了这个奇怪的返回NULL错误。

修正后的完整代码

把那行错误的代码替换掉,再加上窗口等待和销毁的语句(不然窗口会一闪而过根本看不到效果):

import pytesseract
from pytesseract import Output
import cv2

# 如果你还没设置Tesseract的安装路径,记得加上这行(路径根据你自己的安装位置调整)
# pytesseract.pytesseract.tesseract_cmd = 'C:/Program Files/Tesseract-OCR/tesseract.exe'

img = cv2.imread('invoice.png')
d = pytesseract.image_to_data(img, output_type=Output.DICT)
n_boxes = len(d['level'])
for i in range(n_boxes):
    (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i])
    img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)

# 修正参数顺序,加上窗口控制语句
cv2.imshow('img', img)
cv2.waitKey(0)  # 等待任意按键输入后关闭窗口
cv2.destroyAllWindows()  # 销毁所有创建的OpenCV窗口

针对你的发票数据提取项目的小建议

  1. 图像预处理能大幅提升OCR准确率:发票图片可能存在倾斜、噪点、光照不均等问题,提取前可以做这些处理:
    # 转灰度图
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 自适应二值化,应对光照不均的情况
    img_processed = cv2.adaptiveThreshold(img_gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)
    
  2. 正则提取日期要覆盖多格式:发票里的日期格式可能五花八门,比如YYYY-MM-DD、DD/MM/YYYY、MM-DD-YYYY等,写正则表达式的时候尽量覆盖这些常见格式。
  3. 提前排查Tesseract路径问题:如果运行时提示找不到Tesseract引擎,一定要在代码开头指定它的安装路径,不然pytesseract没法正常调用OCR功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:29:08