冲突的OpenCV和Matplotlib

时间:2016-08-12 15:31:54

标签: python opencv matplotlib

我一直试图在同一个脚本中使用opencv和带有pyplot的图表来显示图像,但是我会收到一个错误:libc++abi.dylib: terminating with uncaught exception of type NSException Abort trap: 6前面还出现了多行神秘错误日志{{3} }。

重现问题的最小代码是:

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)执行时没有错误,并显示两个图形。显然,交互模式中的某些东西会绕过这个问题。

1 个答案:

答案 0 :(得分:0)

嗯...很老的问题。

这个问题是由gtk版本引起的。

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

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