python - MatplotLib (TKinter) + OpenCV 在 Python 3 中崩溃

标签 python python-3.x opencv matplotlib tkinter

我正在尝试运行一些 Python 3 代码,它首先显示一个 OpenCV 窗口,当它关闭时,它应该使用 MatplotLib 绘制一些内容。然而,在 plt.show() 调用时,程序崩溃:python3.6 意外退出。

import numpy as np

import matplotlib
matplotlib.use("TkAgg")     # <== Doesn't solve the problem
import matplotlib.pyplot as plt

import cv2
#cv2.ocl.setUseOpenCL(False)  <== Doesn't solve the problem

im = np.zeros((100,100,3))
cv2.imshow('test', im)
cv2.waitKey(0)

plt.plot(np.sin(np.linspace(0,20,200)))
plt.show()                  # <== Crashes on this call

在其他 StackOverflow 帖子中,我发现将 MatplotLib 后端设置为 TkAgg 应该可以解决此问题或设置 setUseOpenCL(false)。然而,这两个潜在的修复程序都不适用于我的 MacBook。我尝试了几件事,例如更改导入顺序,尝试交换 MatplotLib 后端。有人知道如何解决这个问题吗?

MacOS Sierra 10.12.3
Python 3.6.0
TKinter版本8.5
OpenCV版本3.2.0
MatplotLib 版本 2.0.0

它如何崩溃的堆栈跟踪:

libc++abi.dylib:以 NSException 类型的未捕获异常终止

2017-03-28 11:30:45.639 python3.6[5208:78361] -[NSApplication _setup:]: unrecognized selector sent to instance 0x7f997ec98190 2017-03-28 11:30:45.641 python3.6[5208:78361] * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSApplication _setup:]: unrecognized selector sent to instance 0x7f997ec98190' * First throw call stack: ( 0 CoreFoundation 0x00007fffbeb80e7b exceptionPreprocess + 171 1 libobjc.A.dylib 0x00007fffd3760cad objc_exception_throw + 48 2 CoreFoundation 0x00007fffbec02cb4 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132 3 CoreFoundation 0x00007fffbeaf2fb5 ___forwarding_ + 1061 4 CoreFoundation 0x00007fffbeaf2b08 _CF_forwarding_prep_0 + 120 5 Tk 0x00000001032c45e6 TkpInit + 471 6 Tk 0x000000010323fc8d Tk_Init + 1794 7 _tkinter.cpython-36m-darwin.so 0x000000010311cde6 Tcl_AppInit + 82 8 _tkinter.cpython-36m-darwin.so 0x00000001031183a3 _tkinter_create + 1094 9 Python 0x0000000100b28ea2 _PyCFunction_FastCallDict + 172 10 Python 0x0000000100b927a2 call_function + 584 11 Python 0x0000000100b8fbbb _PyEval_EvalFrameDefault + 23930 12 Python 0x0000000100b92fbf _PyEval_EvalCodeWithName + 1973 13 Python 0x0000000100b938c4 _PyFunction_FastCallDict + 477 14 Python 0x0000000100aeea73 _PyObject_FastCallDict + 231 15 Python 0x0000000100aeeb93 _PyObject_Call_Prepend + 149 16 Python 0x0000000100aee8cb PyObject_Call + 102 17 Python 0x0000000100b3cd24 slot_tp_init + 61 18 Python 0x0000000100b39ac3 type_call + 184 19 Python 0x0000000100aeea34 _PyObject_FastCallDict + 168 20 Python 0x0000000100b9263b call_function + 225 21 Python 0x0000000100b8fbbb _PyEval_EvalFrameDefault + 23930 22 Python 0x0000000100b93976 _PyFunction_FastCall + 122 23 Python 0x0000000100b92775 call_function + 539 24 Python 0x0000000100b8fbbb _PyEval_EvalFrameDefault + 23930 25 Python 0x0000000100b92fbf _PyEval_EvalCodeWithName + 1973 26 Python 0x0000000100b89e02 PyEval_EvalCodeEx + 100 27 Python 0x0000000100b101e3 function_call + 363 28 Python 0x0000000100aee8cb PyObject_Call + 102 29 Python 0x0000000100b8fe16 _PyEval_EvalFrameDefault + 24533 30 Python 0x0000000100b92fbf _PyEval_EvalCodeWithName + 1973 31 Python 0x0000000100b936da fast_function + 241 32 Python 0x0000000100b92775 call_function + 539 33 Python 0x0000000100b8fbbb _PyEval_EvalFrameDefault + 23930 34 Python 0x0000000100b93976 _PyFunction_FastCall + 122 35 Python 0x0000000100b92775 call_function + 539 36 Python 0x0000000100b8fbbb _PyEval_EvalFrameDefault + 23930 37 Python 0x0000000100b92fbf _PyEval_EvalCodeWithName + 1973 38 Python 0x0000000100b936da fast_function + 241 39 Python 0x0000000100b92775 call_function + 539 40 Python 0x0000000100b8fbbb _PyEval_EvalFrameDefault + 23930 41 Python 0x0000000100b92fbf _PyEval_EvalCodeWithName + 1973 42 Python 0x0000000100b936da fast_function + 241 43 Python 0x0000000100b92775 call_function + 539 44 Python 0x0000000100b8fbbb _PyEval_EvalFrameDefault + 23930 45 Python 0x0000000100b92fbf _PyEval_EvalCodeWithName + 1973 46 Python 0x0000000100b89d98 PyEval_EvalCode + 100 47 Python 0x0000000100bb33aa run_mod + 58 48 Python 0x0000000100bb36bf PyRun_FileExFlags + 178 49 Python 0x0000000100bb2d58 PyRun_SimpleFileExFlags + 676 50 Python 0x0000000100bc74d0 Py_Main + 3472 51 python3.6 0x0000000100adfe17 python3.6 + 7703 52 libdyld.dylib 0x00007fffd4044255 start + 1 53 ??? 0x0000000000000002 0x0 + 2 )

最佳答案

不确定它是否会对你们有所帮助,但我在尝试将 matplotlib 嵌入到 kivy 应用程序中(也在 Mac 上)时遇到了类似的问题,经过几个小时的谷歌搜索、重写类、卸载和重新安装,以及在某一时刻甚至尝试完全使用不同的库进行绘图。我发现最简单的解决方案是完全关闭 ('TkAgg') 后端,因为它看起来效果不太好,然后显式声明 OSX 后端

import matplotlib
matplotlib.use("MacOSX")
import matplotlib.pyplot as plt

为我工作,奥卡姆斯 Razor 和我想的一切,祝你好运!

关于python - MatplotLib (TKinter) + OpenCV 在 Python 3 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43066073/

相关文章:

opencv - SURF 和 OpenSURF 为图像着色

python - 使用请求抓取网页不会返回所有数据

python - 使用 Expect 在远程机器上运行本地 Python 脚本

python-3.x - 如何使用 pandas python 对特定列进行操作第 3 部分

c++ - OpenCV 聚类函数 cv KMeans2() - 数组中的聚类中心类型是什么?

c - OpenCV 使用 Xcode 时出现空指针错误

python - 什么可以阻止带有小写名称的列表理解出现在 Spyder 变量资源管理器中?

python - 如何使用 pypy 1.4.1 安装 twisted 10.2.0?

Python:修改.cfg文件中的部分字符串

python-3.x - Python/Tkinter : ModuleNotFoundError: No module named '_tkinter'