OpenCV与Matplotlib冲突问题

3
我一直在尝试在同一个脚本中使用OpenCV显示图像并使用Pyplot绘制图表,但是我会收到一个错误:libc++abi.dylib: terminating with uncaught exception of type NSException Abort trap: 6,并伴随着多行神秘的错误日志,也在这个问题显示。
重现此问题的最小代码如下:
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时发生,如果我只使用其中一个库,则不会出现问题。
我正在使用Python 2.7、OpenCV 2.4.13和Matplotlib 1.5.1(也尝试过2.0.0b)在Mac OS X El Capitan 10.11.3的虚拟环境中。
更新:代码可以以不同的顺序执行而没有错误:
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)中运行代码时,没有错误并且显示了两个图形。显然,交互模式中的某些东西绕过了这个问题。


在导入后面添加这一行cv2.ocl.setUseOpenCL(False)进行尝试。 - Tes3awy
我认为Python中无法访问ocl:AttributeError: 'module' object has no attribute 'ocl' - Wingo
这是我将这个命令放入脚本中来解决问题的做法。 - Tes3awy
1个回答

0

嗯...非常老的问题。

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

通常,matplotlib使用gtk2,但openCV 3.X使用gtk3。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接