1

我有一个图像,我做了一些处理,以便将背景与前景分开,创建一个二进制(黑/白)图像。

使用 AForge,我能够从处理后的图像中检测到所有 blob,并将它们返回。

因此,我将原始图像复制到“SourceImg”,进行一些过滤以分离背景并使其成为二进制图像,然后我可以正确地进行 blob 提取。

    public static List<Bitmap> ApplyBlobExtractor(Bitmap SourceImg)
    {
        List<Bitmap> ImgLetters = new List<Bitmap>();
        AForge.Imaging.BlobCounter blobCounter = new AForge.Imaging.BlobCounter();

        // Sort order
        blobCounter.ObjectsOrder = AForge.Imaging.ObjectsOrder.XY;
        blobCounter.ProcessImage(SourceImg);
        AForge.Imaging.Blob[] blobs = blobCounter.GetObjects(SourceImg, false);

        // Adding images into the image list            
        AForge.Imaging.UnmanagedImage currentImg;
        foreach (AForge.Imaging.Blob blob in blobs)
        {
            currentImg = blob.Image;
            ImgLetters.Add(currentImg.ToManagedImage());
        }
        return ImgLetters;
    }

我真正想做的是使用这些 blob 的信息从原始的、未处理的图像中提取位置。

理想情况下,我想像切饼干一样使用 blob,并从我最初的未处理图像文件中提取它们。

4

2 回答 2

1

您可以使用Blob 的图像和源图像来使用AForge.Imaging.Filters.Intersect类。

于 2012-09-27T05:12:13.090 回答
0

假设您的部分图像处理没有调整原始图像的大小,为什么不循环应用裁剪变换到原始图像,将裁剪矩形设置为 blob 的 Rectangle 属性?

于 2012-09-26T20:06:48.913 回答