Yogevnn
Yogevnn

Reputation: 1510

C# AForge.Net image processing drawing on image

I'm using this example: http://www.aforgenet.com/framework/features/blobs_processing.html

I tried using the last example and show the output in a picture box after button click:

using AForge;
using AForge.Imaging;
using AForge.Imaging.Filters;
using AForge.Math.Geometry;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace Image_Processing_testings
{
public partial class Form1 : Form
{
    Bitmap image = null;
    public Form1()
    {
        InitializeComponent();
        Bitmap bitmap = new Bitmap("C:\\Users\\user\\Desktop\\test.png");
        Bitmap gsImage = Grayscale.CommonAlgorithms.BT709.Apply(bitmap);

        DifferenceEdgeDetector filter = new DifferenceEdgeDetector();
        image = filter.Apply(gsImage);



        // process image with blob counter
        BlobCounter blobCounter = new BlobCounter();
        blobCounter.ProcessImage(image);
        Blob[] blobs = blobCounter.GetObjectsInformation();

        // create convex hull searching algorithm
        GrahamConvexHull hullFinder = new GrahamConvexHull();

        // lock image to draw on it
        BitmapData data = image.LockBits(
            new Rectangle(0, 0, image.Width, image.Height),
                ImageLockMode.ReadWrite, image.PixelFormat);
        int i = 0;
        // process each blob
        foreach (Blob blob in blobs)
        {
            List<IntPoint> leftPoints, rightPoints, edgePoints = new List<IntPoint>();

            // get blob's edge points
            blobCounter.GetBlobsLeftAndRightEdges(blob,
                out leftPoints, out rightPoints);

            edgePoints.AddRange(leftPoints);
            edgePoints.AddRange(rightPoints);

            // blob's convex hull
            List<IntPoint> hull = hullFinder.FindHull(edgePoints);


            Drawing.Polygon(data, hull, Color.Red);
            i++;
        }

        image.UnlockBits(data);


        MessageBox.Show("Found: " + i + " Objects");
    }

    private void button1_Click_1(object sender, EventArgs e)
    {
        pictureBox1.Image = image;
    }
}
}

The result is that i'm getting the image after filter, but without any polygon on it.

I counted the number of blob and got 3 for this picture :

Image for processing

Upvotes: 1

Views: 3045

Answers (1)

rayryeng
rayryeng

Reputation: 104464

The examples in the link you've provided assume that white pixels belong to the object and black pixels belong to the background. Your image that you've provided is the opposite. Therefore, invert the image before applying the algorithm and that should work.

Upvotes: 2

Related Questions