edge_detection in C
authorTomas Musil <tomik.musil@gmail.com>
Fri, 19 Oct 2012 19:05:12 +0000 (21:05 +0200)
committerTomas Musil <tomik.musil@gmail.com>
Fri, 19 Oct 2012 19:06:09 +0000 (21:06 +0200)
pcf.c

diff --git a/pcf.c b/pcf.c
index eccb991..4a14681 100644 (file)
--- a/pcf.c
+++ b/pcf.c
@@ -1,23 +1,63 @@
 #include <Python.h>
 
-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}
 };