今天处理Python的返回值,折腾了半天,又是连蒙带猜,找到了办法。为了方便大家,特别提供出来。希望给其他人带来工作上的顺利。
int fext_python_action(const ImageBuffer* pImage, DataBuffer* pOutput) { PyObject* pArgs = PyTuple_New(1); PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 1)); PyObject* pResult = PyObject_CallObject(g_pPythonFunction_FextAction, pArgs); //开始处理返回值。具体含义看注释。通过运行测试。 PyArrayObject* pContArray = PyArray_GETCONTIGUOUS((PyArrayObject*)pResult); float* pDataPtr = (float*)PyArray_DATA(pContArray); //数组多少个维度? int num_dim = PyArray_NDIM(pContArray); //每个维度的长度 npy_intp* pDim = PyArray_DIMS(pContArray); //得到元素总数 int nDataCount = 1; for (int i = 0; i < num_dim; i++) { nDataCount *= pDim[i]; } GH_LOG_INFO("num_dim=%d, nDataCount=%d", num_dim, nDataCount); //输出前4个 for (int i = 0; i < 4; i++) { GH_LOG_INFO("data[%d]=%f", i, pDataPtr[i]); } //输出后4个 for (int i = nDataCount-4; i < nDataCount; i++) { GH_LOG_INFO("data[%d]=%f", i, pDataPtr[i]); } Py_DECREF(pContArray); Py_DECREF(pResult); Py_DECREF(pArgs); return 0; }