c++ - 调用一些 PyObject 函数会导致段错误 - Boost python

标签 c++ python-3.x opencv boost

对于一个项目,我需要在 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);

它们也会导致段错误。

所以,我很困。你有什么建议吗 ?提前致谢。

最佳答案

感谢 Tanner Sansburry,我通过添加解决了这个问题:

Py_Initialize();

在我的代码中。

问题解决了!

关于c++ - 调用一些 PyObject 函数会导致段错误 - Boost python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36649699/

相关文章:

c++ - 'WCHAR* 类型的参数与 "const char*"不兼容'

python-3.x - 发送带有内嵌图像的电子邮件 Flask-Mail?

将字节转换为整数的 Python 2 和 3 兼容方法

python - Opencv Video Capture .read功能在不同PC上的不同结果

c++ - 使用 opencv 和 c++ 跟踪帧序列中的某些特定点

OpenCV 向量到 Mat 但不是 element->row

c++ - 定义概率分布成本高吗?

c++ - 获取异常的正确堆栈

c++ - dispatch_apply 'for loop' 的 GCD

python - 为什么我的 python 打印比 Go 的 fmt.Print 和 os.Stdout.Write 运行得更快