C++调用Python(二)参数传递

上一篇博客我们介绍了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/79570255https://blog.csdn.net/qq_41433316/article/details/97141318

发表评论