Gnome Wayland环境下cv2.namedWindow触发警告程序停止问题求助
问题根因
当前桌面环境使用GNOME + Wayland显示协议,你安装的OpenCV默认依赖Qt作为GUI渲染后端,Qt默认会忽略Wayland环境回退到X11协议,适配冲突导致调用窗口相关接口时程序崩溃。
可尝试的解决方案(按优先级从高到低排序)
方案1:代码内指定Qt使用Wayland后端
在导入cv2之前添加环境变量配置,让Qt适配Wayland协议,修改后代码如下:
import os # 必须在导入cv2之前设置环境变量才会生效 os.environ["QT_QPA_PLATFORM"] = "wayland" import cv2 def run(self): name_of_window = 'Test_version' image_cv2 = cv2.imread('external_data/probe.jpg') # 增加读取结果判空,避免图片不存在导致的二次崩溃 if image_cv2 is None: print("图片读取失败,请检查路径是否正确") return cv2.namedWindow(name_of_window, cv2.WINDOW_NORMAL) cv2.imshow(name_of_window, image_cv2) cv2.waitKey(0) cv2.destroyAllWindows()
方案2:使用X11兼容模式运行
如果方案1运行后仍然报错,可将上述环境变量的值改为xcb,强制Qt使用X11协议,依托Wayland自带的XWayland兼容层运行,兼容性更好:
os.environ["QT_QPA_PLATFORM"] = "xcb"
如果是在Snap版PyCharm中运行,也可以直接在运行配置的「环境变量」栏添加QT_QPA_PLATFORM=xcb,无需修改代码。
方案3:切换系统显示协议为Xorg
如果以上方案都无效,可以在系统登录界面点击用户头像后,右下角选择「Ubuntu on Xorg」登录,完全切换到X11显示协议,即可彻底解决该兼容问题。
内容的提问来源于stack exchange,提问作者Spartak Borisov
相关产品推荐
相关产品推荐

