将Python对象(PyObject *)转换为C ++类

时间:2019-05-10 06:09:39

标签: c++ python-3.x

我正在从我的C ++代码中调用python脚本,并且一切正常。问题出在python脚本的返回中。

如果返回值是整数,则很容易使用PyLong_AsLong将结果PyObject *转换为int(长整数)。浮子也一样...

但是,如果python函数的返回是Class或用户定义的对象,该怎么办?如何将生成的PyObject转换为C ++中的等效类?

请注意,我没有为此使用Boost。

例如,假设我在python中使用DLIB人脸检测器。我将从发送图像的C ++调用它,在python中进行检测并将输出结果返回给c ++

这里是一个例子:

.
.
.

Mat img = imread("test.jpg");
const int ND = img.dims + 1;
npy_intp dims[]{ img.rows, img.cols , img.channels() };
import_array();
PyObject *pArray = PyArray_SimpleNewFromData(ND, dims, NPY_UBYTE, reinterpret_cast<void*>(img.data));
PyObject *value = PyObject_CallMethod(engine, "extract_faces", "(O)", pArray);

在Python中:

def extract_faces(self, image=None):

    faces = self.face_detector.getAllFaces(image)
    print (type(faces))

    return faces

faces是类型。 C ++值对象是PyObject *。如何从该PyObject获取DLIB矩形? (或任何其他用户定义的类)

0 个答案:

没有答案