From: Tomas Musil Date: Fri, 19 Oct 2012 19:05:12 +0000 (+0200) Subject: edge_detection in C X-Git-Url: http://git.tomasm.cz/imago.git/commitdiff_plain/ad06aed1192f4b21ae009c593e8bf2ca5ed14fad?hp=6e16bbc7797b679d6681eee08d9103984728b98f edge_detection in C --- diff --git a/pcf.c b/pcf.c index eccb991..4a14681 100644 --- a/pcf.c +++ b/pcf.c @@ -1,23 +1,63 @@ #include -static PyObject* py_test(PyObject* self, PyObject* args) +static PyObject* py_edge(PyObject* self, PyObject* args) { - unsigned char *image; + const unsigned char *image; int x; int y; int size; - if (!PyArg_ParseTuple(args, "(ii)s#", &x, &y, &image, &size)) return NULL; - int i; - for (i=0; i < size; i++) { - image[i] = i % 256; + int j; + int sum; + + unsigned char *n_image; + PyObject *result; + + if (!PyArg_ParseTuple(args, "(ii)s#", &x, &y, &image, &size)) return NULL; + + n_image = (char*) malloc(size); + for (i=0; i < 2 * x; i++) { + n_image[i] = 0; + n_image[(y - 2) * x + i] = 0; + } + for (i=0; i < y; i++) { + n_image[x * i] = 0; + n_image[x * i + 1] = 0; + n_image[x * i + x - 2] = 0; + n_image[x * i + x - 1] = 0; + } + + + + for (i=2; i < x - 2; i++) { + for (j=2; j < y - 2; j++) { + sum = image[x * j + i - 2] + image[x * j + i - 1] + image[x * j + i + 1] + image[x * j + i + 2] + + image[x * (j - 2) + i - 2] + image[x * (j - 2) + i - 1] + image[x * (j - 2) + i] + + image[x * (j - 2) + i + 1] + image[x * (j - 2) + i + 2] + + image[x * (j - 1) + i - 2] + image[x * (j - 1) + i - 1] + image[x * (j - 1) + i] + + image[x * (j - 1) + i + 1] + image[x * (j - 1) + i + 2] + + image[x * (j + 2) + i - 2] + image[x * (j + 2) + i - 1] + image[x * (j + 2) + i] + + image[x * (j + 2) + i + 1] + image[x * (j + 2) + i + 2] + + image[x * (j + 1) + i - 2] + image[x * (j + 1) + i - 1] + image[x * (j + 1) + i] + + image[x * (j + 1) + i + 1] + image[x * (j + 1) + i + 2] + - (25 * image[x * j + i]); + if (sum < 0) sum = 0; + if (sum > 255) sum = 255; + n_image[x * j + i] = sum; + } } - return Py_BuildValue("s#", image, size); + + + result = Py_BuildValue("s#", n_image, size); + free(n_image); + return result; } + + static PyMethodDef myModule_methods[] = { - {"test", py_test, METH_VARARGS}, + {"edge", py_edge, METH_VARARGS}, {NULL, NULL} };