前言
最近经常会遇到这样一个case:在visual studio里面需要将某个二维数组保存成numpy文件或者反过来,需要将某个numpy文件load成mat数组。这里面涉及到在visual sutdio里面如何调用python脚本来实现前面提到的功能。
visual studio配置python环境
包含目录添加python的include路径
库目录添加python库路径:
环境变量添加python路径:
python脚本
在visual studio里面调用python脚本里面的函数之前,需要先把python脚本内容准备好,其实就是一系列功能函数的实现,如下图所示是numpy_file.py里面的内容。
import numpy as np
import os
def save_to_right_mapy_file(np_array):
#print("shape of np_array", np_array.shape)
np.save('./right/mapy.npy', np_array)
def load_numpy_file(np_file):
return np.load("./disparities_pp.npy")
#return np.load(np_file)
python初始化代码
主要用来初始化python系统,并加载python代码文件
/*初始化Python
在使用Python系统前,必须使用Py_Initialize对其
进行初始化。它会载入Python的内建模块并添加系统路
径到模块搜索路径中。这个函数没有返回值,检查系统
是否初始化成功需要使用Py_IsInitialized。*/
Py_Initialize();
import_array();
// 检查初始化是否成功
if (!Py_IsInitialized())
{
return -1;
}
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
s_pModule = PyImport_ImportModule("numpy_file");
if (s_pModule == NULL)
{
return -1;
}
s_pDict = PyModule_GetDict(s_pModule);
if (s_pDict == NULL)
{
return -1;
}
python功能函数的调用
前面步骤做好后,就可以在visual studio实现对python脚本里面的函数进行调用。
下面代码演示的是对save_to_right_mapy_file()的调用。
/*Pass by Python Array: Transform an C Array to Python Array*/
npy_intp Dims[2] = { matrix.rows, matrix.cols };
s_pPyArray = PyArray_SimpleNewFromData(2, Dims, NPY_FLOAT, (float *)matrix.data);
PyObject *ArgArray = PyTuple_New(1);
PyTuple_SetItem(ArgArray, 0, s_pPyArray);
PyObject *pFunc = nullptr;
pFunc = PyDict_GetItemString(s_pDict, "save_to_right_mapy_file");
if (pFunc == nullptr)
{
return -1;
}
PyObject_CallObject(pFunc, ArgArray);
//Release
Py_DECREF(ArgArray);
|