2016-04-15 46 views
2

對於一個項目,我需要在Python中連接一些C++模塊。爲此,我需要一個將Python元組轉換爲cv :: Size(openCV對象)的轉換器。這裏是我的C++函數:調用一些PyObject函數導致段錯誤 - Boost python

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不類型的龍,所以我決定檢查它們的類型,但是當我調用一些函數時:

PyObject_repr(x); 
PyObject_str(x); 

它們也會導致段錯誤。

所以,我很卡住。你有什麼建議嗎 ?提前致謝。在我的代碼

Py_Initialize(); 

+0

在進行大部分調用之前,應該初始化Python解釋器。看[這個](http://stackoverflow.com/a/19816546/1053968)的答案。 –

回答

1

感謝唐納Sansburry,我只需添加解決了這個問題。

問題解決!