在进行C++中借用提供的API引用Python文件时出现问题
导入这个文件的时候一直找不到,不停的换位置,即便是使用绝对路径仍然出现问题。
以下为函数代码。
Mat CImageProcessing::RCNNDetect(Mat src)
{
//初始化python解释器
Py_Initialize();
if (!Py_IsInitialized()) {
cout << "python init fail" << endl;
}
//PyRun_SimpleString:把python代码当作一个字符串传给解释器来执行。
//PyRun_SimpleString("import sys");
PyRun_SimpleString("D:/BEST_TIN/MFC/MFC-ImageSystem-master 2/MFC-ImageSystem-master/ImageSystem/script/");
//PyImport_ImportModule:动态加载python模块,相当于导入python脚本文件
PyObject* pModule = PyImport_ImportModule("RCNN");
if (pModule == NULL) {
cout << "module not found" << endl;
}
PyObject* pFunc = PyObject_GetAttrString(pModule, "RCNN_detect");
if (!pFunc || !PyCallable_Check(pFunc)) {
cout << "not found function add_num" << endl;
}
/*将参数转换为PyObject类型*/
PyObject* args = matToNdarray(src);
/*PyObject_CallObject:在C程序中调用python函数
参数1:通过导入函数获得的函数对象
参数2:被调用函数所需的参数*/
PyObject* pRet = PyObject_CallObject(pFunc, args);
//释放参数内存
Py_DECREF(args);
int res = 0;
//把参数返回值转换为C类型
Mat dst = ndarrayToMat(args);
//释放返回值内存
Py_DECREF(pRet);
//cout << res << endl;
Py_DECREF(pModule);
Py_DECREF(pFunc);
/* 撤销Py_Initialize()和随后使用Python/C API函数进行的所有初始化,
并销毁自上次调用Py_Initialize()以来创建并为被销毁的所有子解释器。*/
Py_Finalize();
return dst;
}