1
カスタムC++のものを使うようにPythonのラッピングをしようとしています。主なタイプは、データが1Dバッファに割り当てられた2Dグレー画像タイプです。私はそれを(たとえばin an ubuntu forum次)この方法をラップしよう:カスタムC++の行列をnumpyの配列に渡そうとしています
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オブジェクト表現はOKですが、すぐに私はPythonのメインでそれを印刷しようとして、それがセグメンテーションフォールト(にもかかわらず、形状は良いです)。 Pythonコードは次のようになります。
img = cst.read_image(filename);
if img is None:
print("Can not load image from", filename)
sys.exit(-1)
print(img)
なぜこの問題がありますか?