【发布时间】:2017-08-21 07:43:00
【问题描述】:
我正在尝试运行一些 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:]:无法识别的选择器发送到实例 0x7f997ec98190 2017-03-28 11:30:45.641 python3.6[5208:78361] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSApplication _setup:]:无法识别的选择器发送到实例 0x7f997ec98190” * 首先抛出调用栈: ( 0 核心基础 0x00007fffbeb80e7b 异常预处理 + 171 1 libobjc.A.dylib 0x00007fffd3760cad objc_exception_throw + 48 2核心基础0x00007fffbec02cb4-[NSObject(NSObject)不识别选择器:]+132 3 核心基础 0x00007fffbeaf2fb5 ___forwarding_ + 1061 4 核心基础 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 函数调用 + 363 28 Python 0x0000000100aee8cb PyObject_Call + 102 29 Python 0x0000000100b8fe16 _PyEval_EvalFrameDefault + 24533 30 Python 0x0000000100b92fbf _PyEval_EvalCodeWithName + 1973 31 Python 0x0000000100b936da 快速函数 + 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 快速函数 + 241 39 Python 0x0000000100b92775 call_function + 539 40 Python 0x0000000100b8fbbb _PyEval_EvalFrameDefault + 23930 41 Python 0x0000000100b92fbf _PyEval_EvalCodeWithName + 1973 42 Python 0x0000000100b936da 快速函数 + 241 43 Python 0x0000000100b92775 调用函数 + 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 开始 + 1 53 ??? 0x0000000000000002 0x0 + 2 )
【问题讨论】:
-
似乎是 Mac 的问题。我无法在它按预期工作的 Windows 上重现它。
-
不是 Mac 问题。该代码在没有“TkAgg”的情况下在我的 Mac 上运行良好,并且使用
matplotlib.use("TkAgg")生成相同的错误。 -
你有没有找到解决这个问题的方法?我在使用 OpenCV 3.2.0 的 Mac 上遇到了同样的问题。
-
遇到同样的问题,你找到解决办法了吗
标签: python python-3.x opencv matplotlib tkinter