python - 尝试将自定义 C++ 矩阵传递给 numpy 数组

标签 python c++ arrays numpy wrapper

我正在尝试进行一些 Python 包装以使用自定义 C++ 内容。我们使用的主要类型是 2D 灰度图像类型,数据分配在 1D 缓冲区中。我尝试以这种方式包装它(以下示例 in an ubuntu forum ):

PyObject* to_python_object(const custom2DImage& img) {
  int type_num = (int)NPY_UBYTE;
  long int dims[2] = {img.nr(), img.nc()};

  uchar** tmp_img = new uchar*[img.nr()];
  tmp_img[0] = new uchar[img.nr() * img.nc()];
  for (int i = 1; i < img.nr(); ++i)
    tmp_img[i] = tmp_img[0] + img.nc();
  for (int i = 0; i < img.nc(); ++i)
    memcpy(tmp_mat[i], &img(i, 0), img.nc() * sizeof(uchar));
  PyObject* py_img = PyArray_SimpleNewFromData(2, dims, type_num, tmp_img[0]);

  Py_INCREF(py_img);
  delete[] tmp_img[0];
  delete[] tmp_img;

  PyObject *repr = PyObject_Repr(py_img);
  const char *s = PyString_AsString(repr);
  cout << s << endl;
  Py_XDECREF(repr);

  return py_img;
}

我的 C++ 函数中的 Python 对象表示没问题,但是当我尝试在我的 python main 中打印它时,它出现了段错误(即使形状很好)。 Python代码如下:

img = cst.read_image(filename);
if img is None:
    print("Can not load image from", filename)
    sys.exit(-1)
print(img)

您知道我为什么会遇到这个问题吗?

最佳答案

好的,所以我认为 PyArray_SimpleNewFromData 函数正在复制数据,但它似乎没有。我的错误是释放了 tmp_img 二维数组。

关于python - 尝试将自定义 C++ 矩阵传递给 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40586212/

相关文章:

c++ - 无效的 Mex 函数

c++ - 为什么 std::foreach 不能与 std::vector<bool> 一起使用?

Javascript将多维数组转换为唯一的项目数组

javascript - 一个简单的函数,它将一个数组循环到一个特定的索引,然后将所有内容相加到找到的索引

c++ - 我无法使用 premake5 添加额外的库

python - 使用 PyCharm 导入 Tkinter

python - 如何避免 django 模板中的过多查询?

Python 类型错误 : UMat() missing required argument 'ranges' (pos 2)

arrays - 在数组字段中查找匹配项

python - 如何从Python的范围中排除列表?