调用一些PyObject函数会导致segfault - Boost python

时间:2016-04-15 14:20:01

标签: c++ python-3.x opencv boost

对于一个项目,我需要在Python中连接一些C ++模块。为此,我需要一个将Python元组转换为cv :: Size(openCV对象)的转换器。这是我的C ++函数:

cv::Size tupleToSize(PyObject* obj)
{
    // Check if obj is a tuple :
    if (!PyTuple_CheckExact(obj))
        return cv::Size(-1,-1);

    // Element Extraction :
    PyObject* x = PyTuple_GetItem(obj,0);
    PyObject* y = PyTuple_GetItem(obj,1);

    // TODO : extract values from x and y
    // Trying to create two variables a et b that contains the values
    long a = PyLong_AsLong(x);
    long b = PyLong_AsLong(y);
    /* The first line causes a SegFault*/

    // New cv::Size with extracted values :
    cv::Size ret(a,b);
    return ret;
}

这是调用我的函数的主要部分:

int main()
{

    // New cv:Size :
    Size s(10,20);
    // Conversion :
    PyObject* ss = SizeToTuple(s); // I have a SizeToTuple function that works fine.
    // Reconversion :
    Size sss = tupleToSize(ss); /* SEGFAULT */


    return 0;

}

所以,我想知道我的PyObject x和y是不是Long类型,所以我决定检查它们的类型但是当我调用一些函数时:

PyObject_repr(x);
PyObject_str(x);

它们也会导致段错误。

所以,我很困惑。你有什么建议吗 ?提前谢谢。

1 个答案:

答案 0 :(得分:1)

感谢Tanner Sansburry,我通过添加:

解决了这个问题
Py_Initialize();

在我的代码中。

问题解决了!