3 votes

Transformation de l'image en perspective avec le tuilage

Je suis à la recherche d'une bonne bibliothèque de traitement d'images qui puisse être utilisée pour une nouvelle application que je prévois de créer. Je vais utiliser C#.NET (VS 2008).

Mon application doit faire ce qui suit :

  1. Charger une image au démarrage et l'afficher dans une boîte à images
  2. Je devrais alors pouvoir sélectionner quatre points (TopLeft, TopRight, BottomLeft, BottomRight) n'importe où dans la boîte à images.
  3. Je dois ensuite transformer l'image source dans la perspective correcte en utilisant les 4 points source et destination.

De plus, l'image de sortie finale doit avoir une taille précise. Je veux que l'application puisse utiliser la même perspective et renvoyer une image de la taille rectangulaire spécifiée (pas la taille de 4 points) que je spécifie. J'espère que vous comprenez ce que je veux dire. L'image source doit être mise en mosaïque et transformée pour produire une sortie qui s'adapte complètement à la zone spécifiée.

J'ai essayé certaines bibliothèques comme Aforge.NET, ImageMagick, EMGU etc. Certaines sont lentes. Certaines ne peuvent produire qu'une image en perspective de petite taille. Certaines donnent des erreurs de mémoire. Je n'ai pas trouvé de solution appropriée.

3voto

mafu Points 8920

Je suppose que la réponse à ma question ici peut aussi vous aider dans votre cas.

1voto

Doug S Points 2075

Vous pouvez y jeter un coup d'œil, car cela peut résoudre une partie de votre problème, ou vous mettre sur la bonne voie : http://www.codeproject.com/KB/graphics/YLScsFreeTransform.aspx

Il prendra une image et la déformera en utilisant 4 coordonnées X/Y que vous lui fournirez.

Code rapide, gratuit et simple. Testé et cela fonctionne parfaitement. Téléchargez simplement le code à partir du lien, puis utilisez FreeTransform.cs comme ceci :

using (System.Drawing.Bitmap sourceImg = new System.Drawing.Bitmap(@"c:\image.jpg")) 
{ 
    YLScsDrawing.Imaging.Filters.FreeTransform filter = new YLScsDrawing.Imaging.Filters.FreeTransform(); 
    filter.Bitmap = sourceImg;
    // assign FourCorners (the four X/Y coords) of the new perspective shape
    filter.FourCorners = new System.Drawing.PointF[] { new System.Drawing.PointF(0, 0), new System.Drawing.PointF(300, 50), new System.Drawing.PointF(300, 411), new System.Drawing.PointF(0, 461)}; 
    filter.IsBilinearInterpolation = true; // optional for higher quality
    using (System.Drawing.Bitmap perspectiveImg = filter.Bitmap) 
    {
        // perspectiveImg contains your completed image. save the image or do whatever.
    } 
}

Pour information, je crois que .NET a une limite de 2 Go de mémoire pour les objets, donc si vous travaillez avec des images très grandes, vous pouvez rencontrer une erreur de mémoire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X