python - 冲突的 OpenCV 和 Matplotlib

我一直在尝试在同一脚本中使用 opencv 显示图像并使用 pyplot 绘图,但我会收到一个错误:libc++abi.dylib: terminating with uncaught exception of type NSException Abort trap: 6 前面还有多行神秘的错误日志,问题 here 也显示了.

重现问题的最少代码是:

import cv2
import numpy as np
import matplotlib
matplotlib.use("TkAgg")
from matplotlib import pyplot as plt

img = np.ones((50, 50), np.uint8)
cv2.imshow('image', img)
plt.figure()
plt.plot([1,2], [1,3])
plt.show()

如果我只使用 opencv 或 pyplot,则不会出现此问题。仅在同一个脚本中使用这两个库会产生问题。

我在 Mac OS X El Capitan 10.11.3 上的虚拟环境中使用 python 2.7、opencv 2.4.13 和 matplotlib 1.5.1(也尝试过 2.0.0b)。

更新:代码可以以不同的顺序执行而不会出错:

import cv2
import numpy as np
import matplotlib
matplotlib.use("TkAgg")
from matplotlib import pyplot as plt

plt.figure()
plt.plot([1,2], [1,3])
plt.show()
img = np.ones((50, 50), np.uint8)
cv2.imshow('image', img)

更新 2:在调试器 (PyCharm) 中运行代码可以无错误地执行并显示两个图形。显然,交互模式中的某些东西绕过了这个问题。

最佳答案

嗯……很老的问题了。

这个问题是因为gtk版本问题。

一般matplotlib使用gtk2,但是openCV 3.X使用gtk3。

因此,您需要将您的 openCV 版本降级到 openCV 2.x,升级您的 matplotlib 版本(使用 gtk3)或者在 matplotlib 或 openCV 3.x 之间只使用一个

https://stackoverflow.com/questions/38921595/

相关文章:

javascript - 如何使用 aurelia 路由器生成正确的详细信息 url?

makefile - GNU make - 在另一个 makefile 中引用目标

angular2-routing - 如何最好地将租户包含在 Angular 2 路由中

apache-kafka - 能否使用kafka获取GoogleAnalytics数据并通过spar

sql - 数据库设计 - 重写值

javascript - 让 Gojs FlowCart 在 AngularJS 上工作

linux - 有没有办法从 git lfs 指针下载实际文件?

qt - 如何获取系统的默认浏览器?

java - 如何使用android以稳定的方式连接到没有互联网的ESP8266接入点?

android - 如何在 Retrofit2 converter-simplexml 中调试 "j