我正在从我的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矩形? (或任何其他用户定义的类)