我一直试图在同一个脚本中使用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)执行时没有错误,并显示两个图形。显然,交互模式中的某些东西会绕过这个问题。
答案 0 :(得分:0)
嗯...很老的问题。
这个问题是由gtk版本引起的。
一般来说,matplotlib 使用 gtk2,但 openCV 3.X 使用 gtk3。
因此,您需要将您的 openCV 版本降级到 openCV 2.x,升级您的 matplotlib 版本(使用 gtk3)或仅使用 matplotlib 或 openCV 3.x 之间的一个