Ubuntu 20.04 报错记录: Matplotlib 无法使用 OpenCV 的 libqxcb.so

网上查了一下这个报错,有很多解决方案,但是都不是针对 OpenCV 触发的这种

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in " */lib/*/site-packages/cv2/qt/plugins" even though it was found.

本文的方案是牺牲 cv2.imshow,修复 plt.imshow,省流直接看 Test 3

未找到根治的解决方案,欢迎大家讨论

测试及分析

测试环境如下

Conda: Miniconda3-py313_25.3.1-1-Linux-x86_64.sh

Python: 3.10.16

OpenCV: 4.11.0
NumPy: 1.26.4
Matplotlib: 3.10.3


Test 1

import cv2
import matplotlib.pyplot as plt
import numpy as np

img = np.random.random([100, 199])

# OpenCV Visualization
cv2.imshow("win", img)
cv2.waitKey(0)

# Matplotlib Visualization
plt.imshow(img)
plt.show()

OpenCV 的可视化窗口可以正常显示;但关闭窗口后,后续代码无法运行

或者说,cv2.waitKey 卡死了后面的程序


Test 2

在 Test 1 基础上,将 cv2.waitKey 注释

import cv2
import matplotlib.pyplot as plt
import numpy as np

img = np.random.random([100, 199])

# OpenCV Visualization
cv2.imshow("win", img)
# cv2.waitKey(0)

# Matplotlib Visualization
plt.imshow(img)
plt.show()

cv2.imshow 仍然可以显示,但因为没有 cv2.waitKey 窗口只是闪现了一下

除去报错中的无效信息,有助于排查错误的内容如下

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in " */lib/*/site-packages/cv2/qt/plugins" even though it was found.

This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

找到目录 */lib/*/site-packages/cv2/qt/plugins,其中确实有一个叫做 libqxcb.so 的文件

所以问题在于,Matplotlib 无法使用 OpenCV 的 libqxcb.so


Test 3

在 Test 1 基础上,将 cv2 的相关代码注释

import cv2
import matplotlib.pyplot as plt
import numpy as np

img = np.random.random([100, 199])

# OpenCV Visualization
# cv2.imshow("win", img)
# cv2.waitKey(0)

# Matplotlib Visualization
plt.imshow(img)
plt.show()

在 /usr 目录下搜索 libqxcb.so,尝试替换 OpenCV 自带的 (即替换 */lib/*/site-packages/cv2/qt/plugins 下的 libqxcb.so),回退的话直接重装 opencv-python 即可

直到 plt.show 可以正常显示,我用的是 /usr/local/cuda-12.8/nsight-systems-2024.6.2/host-linux-x64/Plugins/platforms/libqxcb.so

如果此时重新运行 Test 1 的代码,那么 cv2.imshow 会引发以下报错

qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in "*/lib/*/site-packages/cv2/qt/plugins"
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.


Summary

也就是说,在我的这个环境下,没有一个 libqxcb.so 可以兼容 OpenCV 和 Matplotlib

此外还需要解决的,是 cv2.waitKey 会卡死程序的问题

<think>好的,我需要帮助用户在Ubuntu 20.04上安装Kalibr。首先,我得回忆一下用户提供的引用内容。引用[1]提到Ubuntu 20.04和18.04的依赖差异大,需要修改和参考博客及官网。引用[2]则提到了使用Ubuntu 20.04、ROS Noetic、OpenCV4和Python3安装Kalibr的教程。用户之前可能尝试过安装,但遇到了问题,现在需要更详细的步骤。 首先,Kalibr的安装通常依赖ROS环境。Ubuntu 20.04对应的ROS版本是Noetic,而较早的Kalibr可能基于ROS Melodic(Ubuntu 18.04)或更早版本。因此,可能需要处理依赖兼容性问题。根据引用[1]和[2],用户需要安装一些依赖项,可能需要手动调整或替换某些包。 接下来,安装步骤大概包括:安装ROS Noetic,创建Catkin工作空间,安装必要的依赖如OpenCV、Eigen、SuiteSparse等。然后,可能需要从源代码编译Kalibr。这里需要注意Python版本的问题,因为Ubuntu 20.04默认使用Python3,而旧版Kalibr可能依赖Python2,需要调整。 用户提供的参考博客提到了解决依赖关系的问题,比如可能通过修改CMakeLists.txt或安装特定版本的库。例如,OpenCV4可能与Kalibr的某些代码不兼容,需要修改头文件引用或函数调用方式。此外,还可能遇到Boost库版本的问题,需要安装合适的版本。 在编译过程中,用户可能会遇到各种错误,例如缺少头文件、函数未声明等。需要根据错误信息逐一排查,可能需要修改源码中的部分内容,或者安装缺失的依赖包。例如,引用[1]中提到的逐步更改依赖内容,可能涉及到修改package.xml或CMakeLists中的依赖项版本。 最后,测试安装是否成功,可能需要运行Kalibr提供的示例命令,检查是否有错误输出。如果一切顺利,用户应该能够使用Kalibr进行传感器校准。 现在需要将这些步骤整理成清晰的安装指南,确保用户能够逐步执行,并指出可能遇到的常见问题及解决方法。同时,需要提醒用户注意不同Ubuntu版本的差异,特别是ROS和Python版本的变化,以及如何调整依赖项来适应这些变化。</think>### 在 Ubuntu 20.04 上安装 Kalibr 的步骤 Kalibr 是一个用于传感器校准的工具,但其安装过程依赖较多且易受系统环境影响。以下是针对 Ubuntu 20.04 的安装方法: --- #### **1. 安装 ROS Noetic** Kalibr 需要 ROS 支持,Ubuntu 20.04 对应 ROS 版本为 Noetic: ```bash sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 sudo apt update sudo apt install ros-noetic-desktop-full echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc ``` --- #### **2. 安装依赖项** 安装 Kalibr 编译所需的库和工具: ```bash sudo apt install python3-catkin-tools python3-osrf-pycommon \ libeigen3-dev libsuitesparse-dev libopencv-dev libboost-all-dev \ libv4l-dev libceres-dev python3-pip pip3 install numpy scipy matplotlib ``` --- #### **3. 创建 Catkin 工作空间** ```bash mkdir -p ~/kalibr_ws/src cd ~/kalibr_ws catkin init catkin config --extend /opt/ros/noetic catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release ``` --- #### **4. 下载并编译 Kalibr 源码** 从 GitHub 克隆源码并编译: ```bash cd ~/kalibr_ws/src git clone https://github.com/ethz-asl/kalibr.git cd .. catkin build -j4 # 根据 CPU 核心数调整 j 后的数字 ``` --- #### **5. 处理可能的依赖问题** - **OpenCV4 兼容性**: 若编译报错OpenCV 相关,需修改源码中头文件引用,例如将 `#include <opencv/cv.h>` 替换为 `#include <opencv2/opencv.hpp>`[^2]。 - **Python3 适配**: Kalibr 部分脚本可能默认使用 Python2,需在文件头部修改解释器为 `#!/usr/bin/env python3`,并确保 `numpy` 等库已安装。 - **Boost 库版本**: 若报错 `boost::filesystem` 未找到,安装指定版本: ```bash sudo apt install libboost1.71-dev ``` --- #### **6. 验证安装** 编译成功后,运行测试命令: ```bash source ~/kalibr_ws/devel/setup.bash kalibr_calibrate_cameras --help # 应显示帮助信息 ``` --- ### **常见问题解决** 1. **依赖冲突**: 若出现 `catkin build` 失败,尝试删除 `build` 和 `devel` 目录后重新编译。 2. **OpenCV 函数未定义**: 需检查代码中 OpenCV 函数调用是否兼容 OpenCV4,例如 `CV_LOAD_IMAGE_GRAYSCALE` 需改为 `cv::IMREAD_GRAYSCALE`[^2]。 3. **ROS 环境未生效**: 确保 `source /opt/ros/noetic/setup.bash` 和 `source ~/kalibr_ws/devel/setup.bash` 已执行。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荷碧TongZJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值