python - 在从 Qt 调用的 python 脚本中导入 opencv 崩溃
问题描述
我将 Python 嵌入到 Qt C++ 中。当我在 Python 脚本中导入 cv2 时,它会因分段错误而崩溃。在 Python 中运行脚本有效。在没有 Qt 的情况下从 C++ 运行。
Python 脚本:有效
print("Importing cv2")
import cv2
print("cv2 imported")
C++:工作
#include <Python.h>
#include <string>
int main(int argc, char *argv[])
{
std::string module_name("PythonModule");
Py_Initialize();
PyObject* sysPath = PySys_GetObject((char*)"path");
PyObject* pModuleDirPath = PyUnicode_FromString(".");
PyList_Append(sysPath, pModuleDirPath);
Py_DECREF(pModuleDirPath);
PyObject* pModuleName = PyUnicode_FromString(module_name.c_str());
PyObject* pModule = PyImport_Import(pModuleName);
Py_DECREF(pModuleName);
Py_DECREF(pModule);
Py_Finalize();
return 0;
}
Qt:打印“导入 cv2”后出现分段错误
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
std::string module_name("PythonModule");
Py_Initialize();
PyObject* sysPath = PySys_GetObject((char*)"path");
PyObject* pModuleDirPath = PyUnicode_FromString(".");
PyList_Append(sysPath, pModuleDirPath);
Py_DECREF(pModuleDirPath);
PyObject* pModuleName = PyUnicode_FromString(module_name.c_str());
PyObject* pModule = PyImport_Import(pModuleName);
Py_DECREF(pModuleName);
Py_DECREF(pModule);
Py_Finalize();
}
。轮廓:
LIBS += -L /usr/local/lib/python3.5m -lpython3.5m
INCLUDEPATH += /usr/include/python3.5m
版本:
Ubuntu 16.04
Python 3.5
opencv-python 3.4.2.17
Qt Creator 4.7.0 基于 Qt 5.11.1
有人认识到这个问题吗?
解决方案
问题是opencv也使用Qt,所以发生了冲突。解决方案是在没有 Qt 支持的情况下安装 opencv:
pip install opencv-contrib-python-headless
推荐阅读
- node.js - 注入workbox CDN脚本的importScript
- javascript - 多个文本区域
- express - 如何从猫鼬模式中的对象数组中选择特定对象?
- docker - 如何在 Traefik v1.7 中使用特定的 http 端口?
- python - 如何在 pyspark 中添加新列并根据行插入多个值?
- python - 将 python 添加到 PATH 系统变量仍然不会阻止“pip”被识别
- node.js - 续集承诺总是返回假
- c++ - 如何计算给定名称的正在运行的进程数?
- arrays - 如何解析包含嵌套 JSON 数组的 JSON 响应
- javascript - 如何使用排版以角度读取excel文件?