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