static PyObject *Py_BinaryErosion(PyObject *obj, PyObject *args) { PyArrayObject *input = NULL, *output = NULL, *strct = NULL; PyArrayObject *mask = NULL; PyObject *cobj = NULL; int border_value, invert, center_is_true; int changed = 0, return_coordinates; NI_CoordinateList *coordinate_list = NULL; PyArray_Dims origin; if (!PyArg_ParseTuple(args, "O&O&O&O&iO&iii", NI_ObjectToInputArray, &input, NI_ObjectToInputArray, &strct, NI_ObjectToOptionalInputArray, &mask, NI_ObjectToOutputArray, &output, &border_value, PyArray_IntpConverter, &origin, &invert, ¢er_is_true, &return_coordinates)) { goto exit; } if (!_validate_origin(input, origin)) { goto exit; } if (!NI_BinaryErosion(input, strct, mask, output, border_value, origin.ptr, invert, center_is_true, &changed, return_coordinates ? &coordinate_list : NULL)) { goto exit; } if (return_coordinates) { cobj = NpyCapsule_FromVoidPtr(coordinate_list, _FreeCoordinateList); } #ifdef HAVE_WRITEBACKIFCOPY PyArray_ResolveWritebackIfCopy(output); #endif exit: Py_XDECREF(input); Py_XDECREF(strct); Py_XDECREF(mask); Py_XDECREF(output); PyDimMem_FREE(origin.ptr); if (PyErr_Occurred()) { Py_XDECREF(cobj); return NULL; } else { if (return_coordinates) { return Py_BuildValue("iN", changed, cobj); } else { return Py_BuildValue("i", changed); } } }
static PyObject *Py_BinaryErosion(PyObject *obj, PyObject *args) { PyArrayObject *input = NULL, *output = NULL, *strct = NULL; PyArrayObject *mask = NULL; PyObject *cobj = NULL; int border_value, invert, center_is_true; int changed = 0, return_coordinates; NI_CoordinateList *coordinate_list = NULL; npy_intp *origins = NULL; if (!PyArg_ParseTuple(args, "O&O&O&O&iO&iii", NI_ObjectToInputArray, &input, NI_ObjectToInputArray, &strct, NI_ObjectToOptionalInputArray, &mask, NI_ObjectToOutputArray, &output, &border_value, NI_ObjectToLongSequence, &origins, &invert, ¢er_is_true, &return_coordinates)) goto exit; if (!NI_BinaryErosion(input, strct, mask, output, border_value, origins, invert, center_is_true, &changed, return_coordinates ? &coordinate_list : NULL)) goto exit; if (return_coordinates) { cobj = NpyCapsule_FromVoidPtr(coordinate_list, _FreeCoordinateList); } exit: Py_XDECREF(input); Py_XDECREF(strct); Py_XDECREF(mask); Py_XDECREF(output); if (origins) free(origins); if (PyErr_Occurred()) { Py_XDECREF(cobj); return NULL; } else { if (return_coordinates) { return Py_BuildValue("iN", changed, cobj); } else { return Py_BuildValue("i", changed); } } }