Esempio n. 1
0
        void device_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
        {
            Bitmap shoot = eventArgs.Frame.Clone() as Bitmap;

            try
            {
                frameCounter++;
                if (frameCounter > 10)
                {
                    invoices     = invoiceProcess.GetInvoiceCollection(shoot);
                    frameCounter = 0;
                }
                if (invoices != null && invoices.Count > 0)
                {
                    using (Graphics graph = Graphics.FromImage(shoot))
                    {
                        foreach (Invoice invoice in invoices)
                        {
                            graph.DrawPolygon(pen, invoice.Corners);                                               //Draw a polygon around card
                            PointF point = invoiceProcess.GetStringPoint(invoice.Corners);                         //Find Top left corner
                            point.Y += 10;
                            graph.DrawString(invoice.Code == null ? "" : invoice.Code, font, Brushes.Lime, point); //Write string on card
                        }
                    }
                }
                //Draw Rectangle around cards and write card strings on card
            }
            catch (Exception ex)
            {
                File.AppendAllText("e:\\error.txt", ex.Message);
                throw;
            }
            pb_Cinema.Image = ResizeShoot(shoot);
        }
Esempio n. 2
0
        public InvoiceCollection GetInvoiceCollection(Bitmap source)
        {
            InvoiceCollection collection = new InvoiceCollection();  //Collection that will hold cards
            Bitmap            temp       = source.Clone() as Bitmap; //Clone image to keep original image

            FiltersSequence seq = new FiltersSequence();

            seq.Add(Grayscale.CommonAlgorithms.BT709); //First add  grayScaling filter
            seq.Add(new OtsuThreshold());              //Then add binarization(thresholding) filter
            temp = seq.Apply(source);                  // Apply filters on source image

            //Extract blobs from image whose size width and height larger than 150
            BlobCounter extractor = new BlobCounter();

            extractor.FilterBlobs = true;
            extractor.MinWidth    = extractor.MinHeight = InvoiceHeight - 50;
            extractor.MaxWidth    = extractor.MaxHeight = InvoiceWidth + 50;
            extractor.ProcessImage(temp);//去掉不符合宽高的色块

            //Will be used transform(extract) cards on source image
            QuadrilateralTransformation quadTransformer = new QuadrilateralTransformation();

            //Will be used resize(scaling) cards
            ResizeBilinear resizer = new ResizeBilinear(InvoiceWidth, InvoiceHeight);

            foreach (Blob blob in extractor.GetObjectsInformation())
            {
                //Get Edge points of card
                List <IntPoint> edgePoints = extractor.GetBlobsEdgePoints(blob);
                //Calculate/Find corners of card on source image from edge points
                List <IntPoint> corners = PointsCloud.FindQuadrilateralCorners(edgePoints);

                quadTransformer.SourceQuadrilateral     = corners; //Set corners for transforming card
                quadTransformer.AutomaticSizeCalculaton = true;
                //提取图像
                Bitmap invocieImg = quadTransformer.Apply(source);          //Extract(transform) card image

                if (invocieImg.Width < invocieImg.Height)                   //If card is positioned horizontally
                {
                    invocieImg.RotateFlip(RotateFlipType.Rotate90FlipNone); //Rotate
                }
                invocieImg = resizer.Apply(invocieImg);                     //归一化图像
                //       File.AppendAllText("e:\\info.txt", "aaaaaaaaaaaaaaa");
                //    File.AppendAllText("e:\\info.txt",invocieImg.FrameDimensionsList.ToString());
                //invocieImg.Save("e:\\" + Guid.NewGuid() + ".jpg");
                //   Thread.Sleep(1000);
                Invoice invoice = new Invoice(invocieImg, corners.ToArray()); //Create invoice Object
                Bitmap  target  = invoice.GetTarget();
                //try
                //{
                // //   target.Save("e:\\imgt\\" + Guid.NewGuid() + "taar.jpg");
                //}
                //catch (Exception ex)
                //{
                //    File.AppendAllText("E:\\error2.txt", ex.Message + "**********"+ex.Source);
                //    throw;
                //}

                try
                {
                    invoice.Code = ImageProcess.GetYZMCode(target, "zimo.txt", 4, 20, 30, 2, false, 4);
                    collection.Add(invoice); //Add card to collection
                }
                catch (Exception ex)
                {
                    File.AppendAllText("E:\\error2.txt", ex.Message + "**********" + ex.Source + "---" + DateTime.Now);
                    throw;
                }
            }
            return(collection);
        }