问题描述:
在python3中使用import cv2后使用cv2.imshow() 报错(python3:6706): Gtk-CRITICAL **: IA__gtk_widget_style_get: assertion ‘GTK_IS_WIDGET (widget)’ failed。

系统配置:
ubuntu16.04 + opencv3.4.2 + python3.5

解决过程:
1、网上参考解决方法
https://blog.csdn.net/Chandler_Bing_/article/details/107244426
https://stackoverflow.com/questions/35351024/pyqt5-gtk-critical-ia-gtk-widget-style-get-assertion-gtk-is-widget-widg
等等。。。
然而均未解决我的问题。

2、具体解决办法
分析:
import cv2 能用说明系统可以导入opencv。通过cv2.__version__打印发现python3中导入的cv2是4.3.2,而不是自己安装的3.4.2,通过pkg-config --modversion opencv,输出opencv 版本是3.4.2 。因此是python3中与本机opencv版本不对问题,然而我从未安装opencv-4.3.2。通过pip3 list 查看pip3 安装的软件,发现opecv-python是4.3.2版本,所以需要安装与opencv3.4.2相对应的opencv-python.

解决:
1、pkg-config --modversion opencv 查询opencv版本号,例如:‘3.4.2’
2、在https://pypi.org/project/opencv-python/#history查询对应的版本号并安装, 例如:pip3 install opencv-python==3.4.2.17
3、最后验证imshow()不再报错。

总结:
由于在安装完成opencv后,通过pip3 install opencv-python 是安装的当前最新版本,与自己安装的opencv不匹配,导致报错,所以需要根据自己安装的opencv版本选择对应的opencv-python版本。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐