【发布时间】:2016-12-19 16:22:22
【问题描述】:
我一直试图在同一个脚本中显示带有 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) 中运行代码不会出错并显示两个图形。显然,交互模式中的某些东西绕过了这个问题。
【问题讨论】:
-
尝试在导入后添加这一行
cv2.ocl.setUseOpenCL(False)。 -
我认为 ocl 在 Python 中无法访问:
AttributeError: 'module' object has no attribute 'ocl' -
是的。我将此命令放在像他这样的脚本中以解决问题。
标签: python opencv matplotlib