C#AForge.Net图像处理图像

时间:2016-04-24 09:46:07

标签: c# image-processing drawing aforge

我正在使用这个例子: http://www.aforgenet.com/framework/features/blobs_processing.html

我尝试使用最后一个示例,并在按钮点击后在图片框中显示输出:

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;
    }
}
}

结果是我在过滤后得到了图像,但没有任何多边形。

我计算了blob的数量并为此图片获得了3:

Image for processing

1 个答案:

答案 0 :(得分:2)

您提供的链接中的示例假设白色像素属于对象,黑色像素属于背景。您提供的图像正好相反。因此,在应用算法之前反转图像,这应该有效。