コード例 #1
0
        private static void ToHSV()
        {
            //int max = 0;
            //int saturation = 0;
            //var hsvImg = ImageBefor.Convert<Hsv, byte>();

            //    using (DenseHistogram histogram = new DenseHistogram(256, new RangeF(0.0f, 180.0f)))
            //    {
            //        histogram.Calculate(new Image<Gray, byte>[] { hsvImg[0] }, false, null);
            //        List<float> hist = new List<float>(histogram.GetBinValues());
            //        max = hist.IndexOf((int)hist.Max());

            //    }
            //    var imgMax = ImageBefor.Convert<Hsv,byte>()[0].CopyBlank().Add(new Gray(max));
            //    hsvImg[0] = imgMax;

            //using (DenseHistogram histogram = new DenseHistogram(256, new RangeF(0.0f, 255.0f)))
            //{
            //    histogram.Calculate(new Image<Gray, byte>[] { hsvImg[1] }, false, null);
            //    List<float> hist = new List<float>(histogram.GetBinValues());
            //    saturation = hist.IndexOf((int)hist.Max());

            //}
            //var satMask = ImageBefor.Convert<Hsv, byte>()[0].CopyBlank().Add(new Gray(saturation));
            //hsvImg[1] = imgMax;

            //using (DenseHistogram histogram = new DenseHistogram(256, new RangeF(0.0f, 255.0f)))
            //{
            //    histogram.Calculate(new Image<Gray, byte>[] { hsvImg[2] }, false, null);
            //    List<float> hist = new List<float>(histogram.GetBinValues());

            //}

            //ImageAfter = hsvImg[2].Convert<Bgr, byte>();


            int max        = 0;
            int saturation = 0;
            var hsvImg     = ImageBefor.Convert <Hsv, byte>();

            using (DenseHistogram histogram = new DenseHistogram(256, new RangeF(0.0f, 180.0f)))
            {
                histogram.Calculate(new Image <Gray, byte>[] { hsvImg[0] }, false, null);
                List <float> hist = new List <float>(histogram.GetBinValues());
                max = hist.IndexOf((int)hist.Max());
            }
            var imgMax = ImageBefor.Convert <Hsv, byte>()[0].CopyBlank().Add(new Gray(max));

            hsvImg[0] = imgMax;

            using (DenseHistogram histogram = new DenseHistogram(256, new RangeF(0.0f, 255.0f)))
            {
                histogram.Calculate(new Image <Gray, byte>[] { hsvImg[1] }, false, null);
                List <float> hist = new List <float>(histogram.GetBinValues());
                saturation = hist.IndexOf((int)hist.Max());
            }
            //var saturationMask =
            //var satMask = ImageBefor.Convert<Hsv, byte>()[0].CopyBlank().Add(new Gray(saturation));
            //hsvImg[1] = imgMax;

            //using (DenseHistogram histogram = new DenseHistogram(256, new RangeF(0.0f, 255.0f)))
            //{
            //    histogram.Calculate(new Image<Gray, byte>[] { hsvImg[2] }, false, null);
            //    List<float> hist = new List<float>(histogram.GetBinValues());

            //}

            ImageAfter = hsvImg[2].Convert <Bgr, byte>();
        }
コード例 #2
0
        public static void Test()
        {
            if (ImageBefor != null)
            {
                //ToHSV();
                Mat kernel = CvInvoke.GetStructuringElement(Emgu.CV.CvEnum.ElementShape.Rectangle, new Size(9, 9), new Point(-1, -1));
                ImageAfter = ImageBefor.MorphologyEx(Emgu.CV.CvEnum.MorphOp.Tophat, kernel, new Point(-1, -1), 1, BorderType.Default, new MCvScalar(1.0));

                //Image<Hsv, byte> bgraImage = ImageBefor.Convert<Hsv, byte>();
                ////for (int i = 0; i < 2; i++)
                ////{
                //    ImageAfter = bgraImage[2].Convert<Bgr, byte>(); //Thread.Sleep(3000);
                ////}

                //ImageAfter = ImageBefor.Convert<Gray, float>().Laplace(13).Convert<Bgr,byte>();

                //Image<Hsv, byte> hsvImage = ImageBefor.Convert<Hsv, byte>();
                //hsvImage[1] = hsvImage[1].Add(new Gray(255));
                //hsvImage[2] = hsvImage[2].Add(new Gray(255));

                //List<double> hue = new List<double>();

                //for (int x = 0; x < hsvImage.Height; x++)
                //{
                //    for (int y = 0; y < hsvImage.Width; y++)
                //    {
                //        hue.Add(hsvImage[x, y].Hue);
                //    }
                //}

                //var max = hue.GroupBy(x => x).OrderByDescending(x => x.Count()).First().Key;
                //hue = hue.GroupBy(x => x).Select(x => x.Key).ToList();
                //var median = hue[hue.Count / 2];

                //for (int x = 0; x < hsvImage.Height; x++)
                //{
                //    for (int y = 0; y < hsvImage.Width; y++)
                //    {
                //        var pix = hsvImage[x, y].Hue;

                //        if (pix > max + 10 || pix < max - 10)
                //        {
                //            hsvImage.Data[x, y, 0] = 90;
                //        }
                //        else
                //        {
                //            hsvImage.Data[x, y, 0] = 180;
                //        }
                //    }
                //}

                //ImageAfter = hsvImage.Convert<Bgr, byte>();

                //Image<Bgra, byte> bgraImage = ImageBefor.Convert<Bgra, byte>();
                //for (int i = 0; i < 4; i++)
                //{
                //    ImageAfter = bgraImage[i].Convert<Bgr, byte>(); Thread.Sleep(3000);
                //}

                //Image<Hls, byte> hsvImage = ImageBefor.Convert<Hls, byte>();
                //for (int i = 0; i < 3; i++)
                //{
                //    ImageAfter = hsvImage[i].Convert<Bgr, byte>();Thread.Sleep(3000);
                //}

                //Image<Lab, byte> LabImage = ImageBefor.Convert<Lab, byte>();
                //for (int i = 0; i < 3; i++)
                //{
                //    ImageAfter = LabImage[i].Convert<Bgr, byte>(); Thread.Sleep(3000);
                //}

                //Image<Luv, byte> LuvImage = ImageBefor.Convert<Luv, byte>();
                //for (int i = 0; i < 3; i++)
                //{
                //    ImageAfter = LuvImage[i].Convert<Bgr, byte>(); Thread.Sleep(3000);
                //}



                //Image<Ycc, byte> YccImage = ImageBefor.Convert<Ycc, byte>();
                //for (int i = 0; i < 3; i++)
                //{
                //    ImageAfter = YccImage[i].Convert<Bgr, byte>(); Thread.Sleep(3000);
                //}

                //using (DefectsFinder df = new DefectsFinder(ImageBefor))
                //{
                //    df.SearchDefects();
                //    //CvInvoke.FillPoly(ImageAfter, new VectorOfVectorOfPoint( df.LargeDefectsContoursMatrix[2]), new MCvScalar(255, 0, 255), LineType.FourConnected);
                //    using (ImageCleaner ci = new ImageCleaner(ImageBefor))
                //    {
                //        //ImageAfter = ci.ClearImageByDefects();
                //        ImageAfter = ci.SpiralCleanLargeDefects(df.LargeDefectsContoursMatrix);

                //        using (Dust dust = new Dust(ImageAfter, df.SmallDefectsContoursMatrix))
                //        {
                //            //CvInvoke.FillPoly(ImageAfter, defectsFinder.SmallDefectsContoursMatrix, new MCvScalar(255,0,255), LineType.FourConnected);
                //            ImageAfter = dust.RemoveDustDefects();
                //        }
                //    }
                //}


                //using (DefectsFinder df = new DefectsFinder(ImageBefor))
                //{
                //    df.SearchDefects();
                //    //CvInvoke.FillPoly(ImageAfter, new VectorOfVectorOfPoint( df.LargeDefectsContoursMatrix[2]), new MCvScalar(255, 0, 255), LineType.FourConnected);
                //    using (ImageCleaner ci = new ImageCleaner(ImageBefor))
                //    {
                //        ImageAfter = ci.InPaintMethod(df.LargeDefectsContoursMatrix, InpaintType.NS);
                //    }
                //}
            }
            else
            {
                throw new ArgumentNullException(nameof(ImageBefor));
            }
        }