Image processing for Processing
This library collects various image processing algorithms and provides a simple access to them. All algorithms are implemented in Java and runs without any other dependencies. If you need high power performance better use opencv for processing.
Installation
If you want to use this library in your processing sketch you can download it via the intergrated Contribution Manager
.
Examples
Original image
Photo is taken by me more here
Basics
Grayscale image
PImage processedImage = Grayscale.apply(image);
Flip image
PImage processedImage = Flip.apply(image, horizontal, vertical); // horizontal and vertical are boolean
Invert colors
// invertRed, invertGreen and invertBlue are boolean
PImage processedImage = InvertColors.apply(image, invertRed, invertGreen, invertBlue);
Threshold image
PImage processedImage = Threshold.apply(image); // Auto threshold
PImage processedImage = Threshold.apply(image, value); // Threshold value between 0 and 255
Dilation image
PImage processedImage = Dilation.apply(image, radius); // radius is a positive number
Erosion image
PImage processedImage = Erosion.apply(image, radius); // radius is a positive number
Vignette image
// intensity and vignetteWidth are floats between 0.0 and 1.0
PImage processedImage = Vignette.apply(image, intensity, vignetteWidth);
Quantization
PImage processedImage = Quantization.apply(image, shades); // shades is a positive number between 1 and 255
Blur
Gaussian blur image
PImage processedImage = Gaussian.apply(image, 7, 0.84089642); // kernel size and sigma
Pixelize image
// pixelsize is a positive number
PImage processedImage = Pixelation.apply(image, pixelsize);
// Pixelize a sub area of the input image
PImage processedImage = Pixelation.apply(image, pixelsize, subX, subY, subWidth, subHeight);
Tilt-Shift-Effect
PImage processedImage = TiltShift.apply(image, blurIntensity, horizontal, position, sharpWideness);
Edge detection
Canny's algorithm
PImage processedImage = CannyEdgeDetector.apply(image);
Sobels algorithm
PImage processedImage = SobelEdgeDetector.apply(image);
// for colored sobel (for each color channel)
PImage processedImage = SobelEdgeDetector.apply(image, false);
Optimisation
Brightness
PImage processedImage = Brightness.apply(image, value);
// value isa positive number for brighting up or a negative for darken down
Changing highlights
// intensity between -1.0 and 1.0
PImage processedImage = Lights.apply(image, intensity);
Changing shadows
// intensity between -1.0 and 1.0
PImage processedImage = Shadows.apply(image, intensity);
AutoBalance image
PImage processedImage = AutoBalance.apply(image);
Bloom image
PImage processedImage = Bloom.apply(image, intensity); // intensity between 0 and 255
Sharpen image
PImage processedImage = Sharpen.apply(image, sharpIntensity); // sharpIntensity between 0.0 and 10.0
Color shift image
// hue is a value between 0 and 360
// offset is the color range which is accepted (in hue range)
// shift is the number of the subtracted or added hue value
PImage processedImage = ColorShift.applyHue(image, hue, offset, shift); // or short: ColorShift.apply(image, hue, offset, shift)
PImage processedImage = ColorShift.applySaturation(image, hue, offset, shift);
PImage processedImage = ColorShift.applyBrightness(image, hue, offset, shift);
Looks
Lookup table image
LUT style = LUT.loadLut(LUT.STYLE.CONTRAST);
PImage processedImage = LUT.apply(image, style);
Glitch image
PImage processedImage = Glitch.apply(image, intensity, scanlineheight);
Dithering
// default dithering algorithm is BAYER_4x4
PImage processedImage = Dithering.apply(image);
// change algrithm: BAYER_2x2, BAYER_4x4, BAYER_8x8
PImage processedImage = Dithering.apply(image, Dithering.Algorithm.BAYER_8x8);
// use a curstom kernel (kernel = float[])
PImage processedImage = Dithering.aapply(PImage image, kernel);
Halftone image
PImage processedImage = Halftone.apply(image, dotsize); // dot size in pixel
PImage processedImage = Halftone.apply(image, dotsize, grid); // grid = true, on false honeycomb style
PImage processedImage = Halftone.apply(image, dotsize, foreground, background); // background and foreground colors
PImage processedImage = Halftone.apply(image, dotsize, foreground, background, grid);
PImage processedImage = Halftone.apply(image, dotsize, foreground, background, spacing, grid); // size between dots in pixels
ASCII image
PImage processedImage = ASCII.apply(image);
// characterset = ASCII.SHORT_SET or ASCII.LONG_SET, another String from black to white
PImage processedImage = ASCII.apply(image, characterset);
PImage processedImage = ASCII.apply(image, characterset, fontSize); // fontSize is an integer
PImage processedImage = ASCII.apply(image, characterset, fontSize, foregroundColor, backgroundColor, toneInColor);
Miscellaneous
Stacked images
// Add so many images in the end as you need
PImage processedImage = Stacker.apply(Stacker.ALGORITHM.AVERAGE, image1, image2);
PImage processedImage = Stacker.apply(Stacker.ALGORITHM.MEDIAN, image1, image2);
Blending two images
// intensity is a float between 0.0 and 1.0
PImage processedImage = Blend.apply(image1, image2, intensity);
Special thanks
My special thanks goes to avatarr for implementing and publishing basic algorithms. Also thank you very much Tom Gibara for your great blog post and the implementation of the canny edge detector.