tutorial net libreria framework downloads descargar c# .net aforge

c# - net - Error en las coordenadas devueltas de blob



descargar aforge video (1)

Podrías probar Math.Round antes de lanzar:

sides[0] = (int)Math.Round(Math.Sqrt(Math.Pow(corners[0].X - corners[1].X, 2) + Math.Pow(corners[0].Y - corners[1].Y, 2))); sides[1] = (int)Math.Round(Math.Sqrt(Math.Pow(corners[2].X - corners[1].X, 2) + Math.Pow(corners[2].Y - corners[1].Y, 2))); sides[2] = (int)Math.Round(Math.Sqrt(Math.Pow(corners[2].X - corners[3].X, 2) + Math.Pow(corners[2].Y - corners[3].Y, 2))); sides[3] = (int)Math.Round(Math.Sqrt(Math.Pow(corners[0].X - corners[3].X, 2) + Math.Pow(corners[0].Y - corners[3].Y, 2)));

Déjame saber si ayuda.

Estoy tratando de detectar y recortar una foto de una página en blanco, en ubicaciones aleatorias desconocidas usando AForge, siguiendo el artículo Here

He descargado una foto de pasaporte de imágenes de google y pegada en una hoja blanca:

AForge hace el trabajo, sin embargo, hay un pequeño problema que no puedo resolver; Las fotos están siendo recortadas mal.

Aquí es cómo se ve la foto recortada después del procesamiento:

¿Te fijas en los márgenes blancos de la foto? como si la foto estuviera inclinada para dejar espacios en blanco a los lados.

No solo AForge no reconoce el cuadrilátero de esta foto como un rectángulo, sino que también lo recorta mal.

Aquí está mi código que tomé del artículo y lo ajusté para recortarlo:

Bitmap bitmap = AForge.Imaging.Image.Clone(bmp, PixelFormat.Format24bppRgb); BitmapData bitmapData = bitmap.LockBits( new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, bitmap.PixelFormat); Invert invertFilter = new Invert(); invertFilter.ApplyInPlace(bitmapData); BlobCounter blobCounter = new BlobCounter(); blobCounter.FilterBlobs = true; blobCounter.MinHeight = 50; blobCounter.MinWidth = 50; blobCounter.MaxHeight = 1500; blobCounter.MaxWidth = 1500; blobCounter.ProcessImage(bitmapData); Blob[] blobs = blobCounter.GetObjectsInformation(); bitmap.UnlockBits(bitmapData); if (blobs.Length == 1) { List<IntPoint> corners; List<IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blobs[0]); SimpleShapeChecker shapeChecker = new SimpleShapeChecker(); if (shapeChecker.IsConvexPolygon(edgePoints, out corners)) { if (corners.Count == 4) { int[] sides = new int[4]; Math.Pow(corners[0].X - corners[1].X, 2); sides[0] = (int)Math.Sqrt(Math.Pow(corners[0].X - corners[1].X, 2) + Math.Pow(corners[0].Y - corners[1].Y, 2)); sides[1] = (int)Math.Sqrt(Math.Pow(corners[2].X - corners[1].X, 2) + Math.Pow(corners[2].Y - corners[1].Y, 2)); sides[2] = (int)Math.Sqrt(Math.Pow(corners[2].X - corners[3].X, 2) + Math.Pow(corners[2].Y - corners[3].Y, 2)); sides[3] = (int)Math.Sqrt(Math.Pow(corners[0].X - corners[3].X, 2) + Math.Pow(corners[0].Y - corners[3].Y, 2)); BaseQuadrilateralTransformationFilter qtb = new QuadrilateralTransformationBilinear(corners, sides.Min(), sides.Max()); bitmap = qtb.Apply(bitmap); } } } bitmap = invertFilter.Apply(bitmap);

Id apreciar cualquier entrada que pueda ofrecer en este ...