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

Ubuntu 14.04下OpenCV 3.4.0调用cv.imshow()报错求助

解决OpenCV cv.imshow() 触发Qt相关错误的问题

这个问题我之前在Ubuntu 14.04上用OpenCV 3.x的时候也碰到过,主要是OpenCV的Qt GUI后端在初始化或者运行环境上出了问题,给你几个靠谱的解决办法:

先排查运行环境

  • 如果你是通过SSH远程连接Ubuntu且没有启用X11转发,那cv.imshow()根本无法工作——因为远程终端没有图形输出环境。这种情况直接放弃显示,改用保存图片的方式:
    cv.imwrite('messi_output.jpg', img)
    
    之后你可以把保存的文件下载到本地查看。

桌面环境下的快速修复

如果是在Ubuntu桌面本地运行,先检查代码是否缺少关键的事件循环处理:
OpenCV的imshow()依赖Qt的事件循环才能正常渲染窗口,必须在调用imshow()后加上waitKey()和destroyAllWindows(),完整代码应该是:

import numpy as np
import cv2 as cv
img = cv.imread('messi5.jpg',0)
print(img)
cv.imshow('image', img)
cv.waitKey(0)  # 无限等待按键输入,处理Qt事件循环
cv.destroyAllWindows()  # 关闭所有OpenCV窗口

很多时候报错就是因为漏掉了cv.waitKey(),它不仅是等待按键,还负责驱动Qt的界面事件,没有它的话窗口无法正常初始化,就会触发你看到的线程错误。

换用Matplotlib显示图片

如果加了waitKey()还是报错,大概率是pip安装的OpenCV版本的Qt绑定有问题(Ubuntu 14.04的系统Qt版本比较老,和OpenCV 3.4.0的兼容性不太好)。这时候可以用Matplotlib来替代OpenCV的GUI显示功能,代码如下:

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt

img = cv.imread('messi5.jpg',0)
print(img)
# OpenCV读入的灰度图是单通道,需要指定灰度色映射
plt.imshow(img, cmap='gray', interpolation='bicubic')
plt.xticks([]), plt.yticks([])  # 隐藏坐标轴,让显示更干净
plt.show()

Matplotlib的显示逻辑更独立,不会依赖OpenCV的Qt后端,基本能解决这类GUI报错。

终极方案:重新编译OpenCV(可选)

如果以上方法都不行,你可以尝试重新编译OpenCV,指定用GTK而不是Qt作为GUI后端(GTK在Ubuntu 14.04上兼容性更好):

  1. 先卸载pip安装的OpenCV:
    pip uninstall python-opencv
    
  2. 安装编译依赖:
    sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev
    
  3. 下载OpenCV 3.4.0的源码,解压后进入源码目录,执行:
    mkdir build && cd build
    cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_GTK=ON ..
    make -j4
    sudo make install
    
    编译安装完成后,Python就能使用带GTK后端的OpenCV了,imshow()应该就能正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:13:18