我一直试图在同一脚本中使用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,问题不会发生。只有在同一个脚本中使用两个库才会产生问题。
我在Mac OS X El Capitan 10.11.3的虚拟环境中使用python 2.7, opencv 2.4.13和matplotlib 1.5.1(也尝试过2.0.0b)。
UPDATE:代码可以按不同的顺序执行而不会出现错误:
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)
UPDATE 2:在调试器(PyCharm)中运行代码没有错误,并显示两个图形。显然,交互模式中的某些东西绕过了这个问题。
嗯…很老的问题
gtk版本问题
通常,matplotlib使用gtk2,但使用openCV 3。
所以,你需要把你的openCV版本降级到openCV 2。升级matplotlib版本(使用gtk3)或在matplotlib或openCV 3.x之间仅使用一个