python - 冲突的 OpenCV 和 Matplotlib

标签 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 之间只使用一个

关于python - 冲突的 OpenCV 和 Matplotlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38921595/

相关文章:

python - 添加列作为 pandas 中每个列元素的出现次数

c# - 提取形状边缘的外部点

python - 如何在 Matplotlib 中连接图形坐标?

python - 根据 3 个变量的颜色 - 麦克斯韦三角形

matplotlib - 如何将 SpaCy 词嵌入可视化为散点图?

python - 发出 GET 请求,然后用 Python (Twisted) 打印出响应体

Python从字典列表列表创建列表

python - Python 中的网页抓取

opencv - 60x60 检测窗口的合理训练图像大小?

c++ - 读取 H.265 和 VP9 帧?