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

Python中OpenCV/QT的QMimeDatabase错误消除求助

问题

运行基于OpenCV的Python摄像头视频流代码时,程序功能正常(摄像头窗口可正常打开),但每次都会弹出QMimeDatabase加载错误:QMimeDatabase: Error loading internal MIME data: Error in line 1 of <internal MIME data>: Premature end of document(对应中文提示:第1行出现错误:文档提前结束)。

代码如下:

import cv2

cap = cv2.VideoCapture(1, cv2.CAP_DSHOW)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 120)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 160)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc('Y','1','6',' '))
cap.set(cv2.CAP_PROP_CONVERT_RGB, 0)
cv2.namedWindow("frame", cv2.WINDOW_NORMAL)

while True:
    ret, frame = cap.read()
    frame = cv2.normalize(frame, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

环境信息:

OS: Windows 10 64bit
Python: 3.7.15 (conda环境)
OpenCV: 4.6.10 (conda-forge安装)
Numpy: 1.21.5
qt-main: 5.15.2 (安装OpenCV时自动安装)

解决方法

该错误源于OpenCV依赖的Qt组件(qt-main 5.15.2)中QMimeDatabase加载内部MIME数据的bug,以下是几种可行的消除方案:

  • 设置Qt环境变量跳过MIME数据库加载
    在导入cv2前设置环境变量,让Qt跳过内部MIME数据加载,避免触发错误:

    import os
    os.environ['QT_NO_MIME_DB'] = '1'
    os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = ''
    
    import cv2
    # 后续代码保持不变
    
  • 更换OpenCV的视频捕获/窗口后端
    尝试改用CAP_MSMF作为视频捕获后端,同时调整窗口创建参数,避开Qt的GUI问题:

    cap = cv2.VideoCapture(1, cv2.CAP_MSMF)
    # 改用WINDOW_AUTOSIZE替代WINDOW_NORMAL
    cv2.namedWindow("frame", cv2.WINDOW_AUTOSIZE)
    
  • 降级Qt版本
    conda-forge的qt-main 5.15.2存在该MIME数据加载问题,降级到5.15.0版本可解决:

    conda install qt-main=5.15.0 -c conda-forge
    
  • 抑制Qt错误日志输出
    如果上述方法无效,直接屏蔽Qt的错误日志输出:

    import os
    import ctypes
    # 抑制Windows系统错误弹窗
    ctypes.CDLL('kernel32').SetErrorMode(0x0001 | 0x0002)
    # 关闭Qt所有日志输出
    os.environ['QT_LOGGING_RULES'] = '*.debug=false;*.warning=false;*.error=false'
    
    import cv2
    # 后续代码保持不变
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:55:21