Partage
  • Partager sur Facebook
  • Partager sur Twitter

c# reconnaitre un rectangle dans une image

    3 mars 2019 à 17:56:50

    Bonjour, j'aimerais faire en sorte que dans une image: si une forme rectangulaire y est présente, je veux que mon programme me le fasse savoir ^^ en gros bool


    Mais malheureusement pour moi, je sais pas du tout par quoi commencer, auriez-vous une idée ?

    Merci d'avance!

    • Partager sur Facebook
    • Partager sur Twitter
      3 mars 2019 à 20:59:25

      Bonjour :)

      https://stackoverflow.com/questions/5945156/c-sharp-detect-rectangles-in-image

      • Partager sur Facebook
      • Partager sur Twitter
        4 mars 2019 à 13:58:55

        Merci car très utile mais le problème est que l'algo detecte l'image soit, comme un rectangle. comment peut-on "sauter" cette vérif, et directe regarder à l'intérieur de l'image et non prendre AUSSI les bordures de l'image comme rectangles?

        • Partager sur Facebook
        • Partager sur Twitter
          4 mars 2019 à 16:54:13

          siteduz a écrit:

          Merci car très utile mais le problème est que l'algo detecte l'image soit, comme un rectangle. comment peut-on "sauter" cette vérif, et directe regarder à l'intérieur de l'image et non prendre AUSSI les bordures de l'image comme rectangles?


          Envoie ton code ? J'ai survolé le lien que je t'ai envoyé et j'ai constaté que ça correspondait à ce que tu cherchais mais je suis pas rentré dans les détails
          • Partager sur Facebook
          • Partager sur Twitter
            6 mars 2019 à 13:17:36

            Mon code c'est le même que le lien, mais si on prend pour exemple cet image, il ne detecte que 1 rectangle (et les bordures de l'image qui forment un rectangle)

            public void checkRectangle(string str, string name)
                    {
                        // Open your image
                        string path = str;
                        Bitmap image = (Bitmap)Bitmap.FromFile(path);
            
                        // locating objects
                        BlobCounter blobCounter = new BlobCounter();
            
                        blobCounter.FilterBlobs = true;
                        blobCounter.MinHeight = 5;
                        blobCounter.MinWidth = 5;
            
                        blobCounter.ProcessImage(image);
                        Blob[] blobs = blobCounter.GetObjectsInformation();
            
                        // check for rectangles
                        SimpleShapeChecker shapeChecker = new SimpleShapeChecker();
            
                        foreach (var blob in blobs)
                        {
                            List<IntPoint> edgePoints = blobCounter.GetBlobsEdgePoints(blob);
                            List<IntPoint> cornerPoints;
            
                            // use the shape checker to extract the corner points
                            if (shapeChecker.IsQuadrilateral(edgePoints, out cornerPoints))
                            {
                                // only do things if the corners form a rectangle
                                if (shapeChecker.CheckPolygonSubType(cornerPoints) == PolygonSubType.Rectangle)
                                {
                                    List<System.Drawing.Point> Points = new List<System.Drawing.Point>();
                                    foreach (var point in cornerPoints)
                                    {
                                        Points.Add(new System.Drawing.Point(point.X, point.Y));
                                    }
            
                                    Graphics g = Graphics.FromImage(image);
                                    g.DrawPolygon(new Pen(Color.Red, 5.0f), Points.ToArray());
            
                                    image.Save("test\\" + name + ".jpg");
                                }
                            }
                        }
                    }

            C'est vraiment étrange qu'il ne détecte pas les autres>_<

            L'image après la fonction:

            Merci pour ton aide encore !

            -
            Edité par siteduz 6 mars 2019 à 13:18:45

            • Partager sur Facebook
            • Partager sur Twitter
              3 août 2020 à 23:53:17

              l'algorithme détecte les rectangles avec un arriéré plan noir et bordure blac
              • Partager sur Facebook
              • Partager sur Twitter

              c# reconnaitre un rectangle dans une image

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown