Für ein Projekt muss ich einige C++ - Module in Python verbinden. Dazu benötige ich einen Konverter, der ein Python-Tupel in ein cv :: Size (openCV-Objekt) konvertiert. Hier ist meine C++ Funktion:Aufruf einiger PyObject-Funktionen verursacht 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;
}
Und hier ist das wichtigste, die meine Funktion aufruft:
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;
}
Also, ich frage mich, ob meine PyObject x und y ist nicht vom Typ Lange, so habe ich beschlossen, Überprüfen Sie ihren Typ, aber wenn ich einige Funktionen wie aufrufen:
Sie verursachen auch einen segfault.
Also bin ich ziemlich fest. Hast du irgendwelche Vorschläge? Danke im Voraus.
Der Python-Interpreter sollte initialisiert werden, bevor die meisten dieser Aufrufe ausgeführt werden. Siehe [diese] (http://stackoverflow.com/a/19816546/1053968) Antwort. –