首页 > 解决方案 > 不能在 python 中同时使用 opencv 和 Gdk

问题描述

这个简单的程序同时导入了 cv2 和 Gdk 并尝试执行一个简单的 imshow() ,但它会因一堆断言而失败:

import cv2
import numpy as np
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Gdk', '3.0')
from gi.repository import Gdk
from gi.repository import GdkPixbuf
print('imshowing...')
cv2.imshow(mat=np.zeros((100, 100, 3), dtype=np.uint8), winname='test')
print('all done')

它失败并显示以下内容:

mshowing...
./fail.py:9: Warning: cannot register existing type 'GdkDisplayManager'
  cv2.imshow(mat=np.zeros((100, 100, 3), dtype=np.uint8), winname='test')
./fail.py:9: Warning: g_once_init_leave: assertion 'result != 0' failed
  cv2.imshow(mat=np.zeros((100, 100, 3), dtype=np.uint8), winname='test')
./fail.py:9: Warning: g_object_new_with_properties: assertion 'G_TYPE_IS_OBJECT (object_type)' failed
  cv2.imshow(mat=np.zeros((100, 100, 3), dtype=np.uint8), winname='test')
./fail.py:9: Warning: invalid (NULL) pointer instance
  cv2.imshow(mat=np.zeros((100, 100, 3), dtype=np.uint8), winname='test')
./fail.py:9: Warning: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed
  cv2.imshow(mat=np.zeros((100, 100, 3), dtype=np.uint8), winname='test')
./fail.py:9: Warning: cannot register existing type 'GdkDisplay'
  cv2.imshow(mat=np.zeros((100, 100, 3), dtype=np.uint8), winname='test')
./fail.py:9: Warning: g_type_register_static: assertion 'parent_type > 0' failed
  cv2.imshow(mat=np.zeros((100, 100, 3), dtype=np.uint8), winname='test')
Segmentation fault (core dumped)

知道如何让两者正常工作吗?

干杯,

标签: pythonopencvgdk

解决方案


推荐阅读