上一篇博客我们介绍了C++调用python的环境配置,这篇博客介绍下C++调用python时的参数传递方法,包括如何传递 变量、结构、字典、数组、图像以及多维数组。
先简单记录下,可以先看参考链接:https://www.cxyzjd.com/article/dcx_dcx/104388718
所有类型都可以通过 PyObject 定义的元组 PyTuple 做参数设置和传参:
矩阵(图像)
可以通过如下方式生成PyObject , 这里有两个要注意的点,一个是必须要把 numpy core include文件夹加入包含目录,另一个是要有 array_import 函数执行,来在C++里面导入numpy,另外还要注意debug模式有可能还是会有问题,要切到release模式,后者复制debug的arraymathu lib后缀加上_d.lib 修饰
更多Numpy的C api可以查阅文档:https://numpy.org/doc/1.17/reference/c-api.array.html
PyObject*PyArray = PyArray_SimpleNewFromData(2, Dims, NPY_UBYTE, data);
列表(一位数组)
PyObject* pyListX = PyList_New(length);
for(int i=0; i<length; i++)
{
PyList_SetItem(pyListX, i, PyFloat_FromDouble( seedPoint[i].x() ));
}
元组
PyTuple_SetItem(ArgArray2, 0, arg2); PyObject *ArgArray2 = PyTuple_New(1);
字符串
pArg = Py_BuildValue("(s)", "my is c++ test!");
参数格式化
pArg = Py_BuildValue("(i,i)", 10, 25); // 变量格式转换成python格式
例子
定义好参数,然后Set到一个元组中,就可以作为参数传递了。
挖个坑,放两个链接
参考链接
开头那个链接这个讲的比较全,下面两个链接辅助一下:
https://blog.csdn.net/Percypan/article/details/79570255。 https://blog.csdn.net/qq_41433316/article/details/97141318