Question

I have never done image processing before.

I now need to go through many jpeg images from a camera to discard those very dark (almost black) images.

Are there free libraries (.NET) that I can use? Thanks.

Was it helpful?

Solution

Aforge is a great image processing library. Specifically the Aforge.Imaging assembly. You could try to apply a threshold filter, and use an area or blob operator and do your comparisons from there.

OTHER TIPS

I needed to do the same thing. I came up with this solution to flag mostly black images. It works like a charm. You could enhance it to delete or move the file.

// set limit
const double limit = 90;

foreach (var img in Directory.EnumerateFiles(@"E:\", "*.jpg", SearchOption.AllDirectories))
{
    // load image
    var sourceImage = (Bitmap)Image.FromFile(img);

    // format image
    var filteredImage = AForge.Imaging.Image.Clone(sourceImage);

    // free source image
    sourceImage.Dispose();

    // get grayscale image
    filteredImage = Grayscale.CommonAlgorithms.RMY.Apply(filteredImage);

    // apply threshold filter
    new Threshold().ApplyInPlace(filteredImage);

    // gather statistics
    var stat = new ImageStatistics(filteredImage);
    var percentBlack = (1 - stat.PixelsCountWithoutBlack / (double)stat.PixelsCount) * 100;

    if (percentBlack >= limit)
        Console.WriteLine(img + " (" + Math.Round(percentBlack, 2) + "% Black)");

    filteredImage.Dispose();
}

Console.WriteLine("Done.");
Console.ReadLine();
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top