import cc.arduino.*; import org.firmata.*; import processing.serial.*; Arduino arduino; int k; float v; float[][] kernel; PImage img; void setup() { arduino = new Arduino(this, Arduino.list()[9], 57600); k = arduino.analogRead(1) / 200; //k = 3; println(k); println(arduino.analogRead(1)); v = 1.0 / (k*k); println(v); kernel = new float[k][k]; for (int i = 0; i < k; i++) { for (int j = 0; j < k; j++) { kernel[i][j] = v; } } //println(kernel) size(640, 360); img = loadImage("bluegill.png"); // Load the original image noLoop(); // Alternatively, use the name of the serial port corresponding to your // Arduino (in double-quotes), as in the following line. //arduino = new Arduino(this, "/dev/tty.usbmodem621", 57600); } void draw() { image(img, 0, 0); // Displays the image from point (0,0) img.loadPixels(); // Create an opaque image of the same size as the original PImage edgeImg = createImage(img.width, img.height, RGB); // Loop through every pixel in the image for (int y = 1; y < img.height-1; y++) { // Skip top and bottom edges for (int x = 1; x < img.width-1; x++) { // Skip left and right edges float sum = 0; // Kernel sum for this pixel for (int ky = -1; ky < (k - 1); ky++) { for (int kx = -1; kx < (k - 1); kx++) { // Calculate the adjacent pixel for this kernel point int pos = (y + ky)*img.width + (x + kx); // Image is grayscale, red/green/blue are identical float val = red(img.pixels[pos]); // Multiply adjacent pixels based on the kernel values sum += kernel[ky+1][kx+1] * val; } } // For this pixel in the new image, set the gray value // based on the sum from the kernel edgeImg.pixels[y*img.width + x] = color(sum); } } // State that there are changes to edgeImg.pixels[] edgeImg.updatePixels(); image(edgeImg, width/2, 0); // Draw the new image }