2016-04-15 20 views
2

プロジェクトでは、PythonでいくつかのC++モジュールをインターフェイスする必要があります。これを行うには、Pythonタプルをcv :: Size(openCVオブジェクト)に変換するコンバータが必要です。ここに私のC++の関数である:PyObject関数を呼び出すとsegfaultが発生する - 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); 

また、segfaultが発生します。

だから、私はかなり固執しています。何か提案はありますか ?前もって感謝します。

Py_Initialize(); 

を自分のコードに:タナーSansburryへ

+0

これらの呼び出しを行う前に、Pythonインタプリタを初期化する必要があります。答えを見る[this](http://stackoverflow.com/a/19816546/1053968)。 –

答えて

1

おかげで、私はちょうど追加することで問題を解決しました。

問題が解決しました。

関連する問題