对于一个项目,我需要在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);
它们也会导致段错误。
所以,我很困惑。你有什么建议吗 ?提前谢谢。
答案 0 :(得分:1)
感谢Tanner Sansburry,我通过添加:
解决了这个问题Py_Initialize();
在我的代码中。
问题解决了!