【问题标题】:Conflicting OpenCV and Matplotlib冲突的 OpenCV 和 Matplotlib
【发布时间】: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


【解决方案1】:

嗯...很老的问题。

这个问题是gtk版本造成的。

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

所以,你需要将你的 openCV 版本降级到 openCV 2.x,升级你的 matplotlib 版本(使用 gtk3)或者只使用 matplotlib 或 openCV 3.x 之间的一个

【讨论】:

    猜你喜欢
    • 2012-09-10
    • 2023-03-24
    • 1970-01-01
    • 2012-08-05
    • 2012-01-24
    • 2012-04-05
    • 2018-01-02
    • 2016-04-30
    • 2019-12-25
    相关资源
    最近更新 更多