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

树莓派OpenCV Trackbar报GLib-GObject-CRITICAL警告原因及解决

问题描述

我正在Raspberry-Pi(树莓派)上使用PiCamera开发HSV颜色校准菜单,校准功能基于OpenCV提供的trackbar、masking特性实现。

使用的源码

源码如下:

import numpy as np
from picamera.array import PiRGBArray
from picamera import PiCamera
import time
import cv2 
 
camera = PiCamera()
camera.resolution = (640, 480)
camera.framerate = 32
raw_capture = PiRGBArray(camera, size=(640, 480))
 
time.sleep(0.1)

def nothing(x):
    pass

cv2.namedWindow("Trackbars")

cv2.createTrackbar("L - H", "Trackbars", 0, 179, nothing)
cv2.createTrackbar("L - S", "Trackbars", 0, 255, nothing)
cv2.createTrackbar("L - V", "Trackbars", 0, 255, nothing)
cv2.createTrackbar("U - H", "Trackbars", 179, 179, nothing)
cv2.createTrackbar("U - S", "Trackbars", 255, 255, nothing)
cv2.createTrackbar("U - V", "Trackbars", 255, 255, nothing)

for frame in camera.capture_continuous(raw_capture, format="bgr", use_video_port=True):
    image = frame.array
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

    l_h = cv2.getTrackbarPos("L - H", "Trackbars")
    l_s = cv2.getTrackbarPos("L - S", "Trackbars")
    l_v = cv2.getTrackbarPos("L - V", "Trackbars")
    u_h = cv2.getTrackbarPos("U - H", "Trackbars")
    u_s = cv2.getTrackbarPos("U - S", "Trackbars")
    u_v = cv2.getTrackbarPos("U - V", "Trackbars")

    lower_blue = np.array([l_h, l_s, l_v])
    upper_blue = np.array([u_h, u_s, u_v])
    mask = cv2.inRange(hsv, lower_blue, upper_blue)
    
    result = cv2.bitwise_and(image, image, mask=mask)

    number_of_white_pix = np.sum(mask == 255)

    cv2.putText(result,str(number_of_white_pix),(0,50),cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,0),2,cv2.LINE_AA)
    
    cv2.imshow("Frame", image)
    cv2.imshow("mask", mask)
    cv2.imshow("result", result)
     
    key = cv2.waitKey(1) & 0xFF
     
    raw_capture.truncate(0)
     
    if key == ord("q"):
        break
cv2.destroyAllWindows()
报错/警告信息

程序运行后始终弹出如下警告:

(Trackbars:8238): GLib-GObject-CRITICAL **: 10:02:29.171: g_object_unref: assertion 'G_IS_OBJECT (object)' failed
咨询问题
  1. 触发该警告的根本原因是什么?
  2. 该警告应如何处理修复?

备注: 已检索相关问题,返回结果多为NVIDIA GPU相关故障,无对应Raspberry-Pi场景的解决方案。


回答

1. 警告触发的根本原因

这个警告和NVIDIA驱动没有任何关联,是树莓派官方软件源预装OpenCV的图形后端兼容bug:
树莓派OS默认通过apt安装的python3-opencv包,绑定了老旧的GTK2作为HighGUI(也就是imshow、createTrackbar这些GUI功能的后端)。GTK2版本的trackbar控件在滑块数值更新、控件重绘时,会错误尝试释放一个从未被正确初始化的GObject内存指针,GLib在执行对象释放操作前检测到指针不是合法的GObject实例,就会抛出这个断言失败的CRITICAL级日志。
这个警告属于非致命提示,不会中断程序运行,也不会影响取色、mask计算、画面显示的实际功能,唯一的影响是会在终端反复打印提示行。

2. 修复方案

根据自己的需求选任意一种方案即可:

  • 方案一:直接忽略
    如果不介意终端打印提示,不需要改任何代码,程序可以正常完成HSV校准的全部功能,不会出现功能异常。
  • 方案二:屏蔽警告输出
    不想换OpenCV版本的话,要么在代码最开头、导入cv2之前加一行配置屏蔽GLib日志:
    import os
    os.environ['G_MESSAGES_DEBUG'] = 'none'
    
    要么运行脚本时直接重定向错误输出丢弃:python3 hsv_calib.py 2>/dev/null
  • 方案三:替换OpenCV版本彻底解决
    卸载apt源安装的老旧OpenCV,换成pip源提供的新版OpenCV即可彻底消除bug,新版OpenCV绑定的GTK3/Qt后端不存在这个控件内存管理的问题,执行以下命令操作:
    sudo apt remove -y python3-opencv
    pip3 install opencv-python
    
    安装完成后重新运行脚本,trackbar重绘时就不会再弹出该GLib警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:45:45