在从Qt调用的Python脚本中导入OpenCV崩溃

importing opencv in python script called from Qt crashes

本文关键字:导入 OpenCV 崩溃 脚本 Python Qt 调用 在从      更新时间:2023-10-16

我在Qt C++中嵌入Python。当我在 Python 脚本中导入 cv2 时,它因分段错误而崩溃。在 Python 中运行脚本可以工作。在没有Qt的情况下从C++运行有效。

Python scrip: works

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();
    
}

.pro 文件:

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

https://pypi.org/project/opencv-contrib-python-headless/