Beispiel #1
0
        public Tuple <double, double> contour_1(int min, int max, Image <Bgr, byte> imgInput, int iron_r, int szar_r, int rain_r)
        {
            double carea     = 0;
            double len       = 0;
            double pre_len   = 0;
            double pre_carea = 0;

            // kontur, pole i obwód dla palety barw Iron

            if (iron_r == 1)
            {
                Image <Gray, byte> imgOut = imgInput.Convert <Gray, byte>().InRange(new Gray(min), new Gray(max));

                Emgu.CV.Util.VectorOfVectorOfPoint contours = new Emgu.CV.Util.VectorOfVectorOfPoint();
                Mat hier = new Mat();

                CvInvoke.FindContours(imgOut, contours, hier, Emgu.CV.CvEnum.RetrType.Ccomp, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple);



                for (int i = 0; i < contours.Size; i++)
                {
                    pre_carea = CvInvoke.ContourArea(contours[i]);

                    carea = carea + pre_carea;

                    pre_len = CvInvoke.ArcLength(contours[i], true);

                    len = len + pre_len;
                }
            }

            // kontur, pole i obwód dla palety barw Rain

            else if (rain_r == 1)
            {
                Image <Gray, byte> imgOut = imgInput.Convert <Gray, byte>().ThresholdBinaryInv(new Gray(min), new Gray(max));



                Emgu.CV.Util.VectorOfVectorOfPoint contours = new Emgu.CV.Util.VectorOfVectorOfPoint();
                Mat hier = new Mat();

                CvInvoke.FindContours(imgOut, contours, hier, Emgu.CV.CvEnum.RetrType.Ccomp, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple);


                for (int i = 0; i < contours.Size; i++)
                {
                    pre_carea = CvInvoke.ContourArea(contours[i]);

                    carea = carea + pre_carea;

                    pre_len = CvInvoke.ArcLength(contours[i], true);

                    len = len + pre_len;
                }
            }

            // kontur, pole i obwód dla skali szarości
            else if (szar_r == 1)
            {
                Image <Gray, byte>[] channels = imgInput.Split();

                Image <Gray, byte> imgOut = channels[0];


                Image <Gray, byte> imgOut_1 = imgOut.InRange(new Gray(min), new Gray(max));



                Emgu.CV.Util.VectorOfVectorOfPoint contours = new Emgu.CV.Util.VectorOfVectorOfPoint();
                Mat hier = new Mat();

                CvInvoke.FindContours(imgOut_1, contours, hier, Emgu.CV.CvEnum.RetrType.External, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple);



                for (int i = 0; i < contours.Size; i++)
                {
                    pre_carea = CvInvoke.ContourArea(contours[i]);

                    carea = carea + pre_carea;

                    pre_len = CvInvoke.ArcLength(contours[i], true);

                    len = len + pre_len;
                }
            }


            return(Tuple.Create(carea, len));
        }