Ejemplo n.º 1
0
        public override bool Do()
        {
            try
            {
                foreach (var src in Sources)
                {
                    IRectangleFilter rectFilter = src as IRectangleFilter;
                    if (rectFilter == null)
                    {
                        continue;
                    }

                    var outData     = src.GetOut();
                    var contourSrcs = rectFilter.GetResultRectangles();

                    for (int dataID = 0; dataID < outData.Count; dataID++)
                    {
                        foreach (var useRect in contourSrcs)
                        {
                            Mat dst = RioImg(outData[dataID].Image, useRect);
                            this.m_out.Add(new DataSrc(dst, outData[dataID].Info, false));
                        }
                    }
                }
            }
            catch { return(false); }
            return(true);
        }
Ejemplo n.º 2
0
        public override bool Do()
        {
            try
            {
                BaseFilter FromSource = Graph.GetFilter(EnumPropertys["FromSource"].Value);

                IContourFilter contourFilter = FromSource as IContourFilter;
                if (contourFilter != null)
                {
                    m_contours = contourFilter.GetResultContours();
                }
                else
                {
                    m_contours = new List <CvContours>();
                }


                IRectangleFilter rectFilter = FromSource as IRectangleFilter;
                if (rectFilter != null)
                {
                    m_rectangles = rectFilter.GetResultRectangles();
                }
                else
                {
                    m_rectangles = new List <Rectangle>();
                }

                foreach (var outData in FromSource.GetOut())
                {
                    this.m_out.Add(outData.Clone());
                }
            }
            catch { return(false); }
            return(true);
        }
Ejemplo n.º 3
0
        public override bool Do()
        {
            try
            {
                m_rectangles.Clear();
                FilterDrawMode DrawOn = (FilterDrawMode)EnumPropertys["DrawOn"].Value;
                bool           bDraw  = DrawOn == FilterDrawMode.Show;

                int clVal     = IntPropertys["Color"].Value;
                var drawColor = new MCvScalar((clVal * 2) % 255, (clVal * 0.5) % 255, clVal);


                BaseFilter drawSourceFilter = Graph.GetFilter(EnumPropertys["DrawSource"].Value);
                if (drawSourceFilter == null)
                {
                    return(false);
                }


                foreach (var src in Sources)
                {
                    IRectangleFilter rectFilter = src as IRectangleFilter;
                    if (rectFilter == null)
                    {
                        continue;
                    }

                    src.GetOut(); // нужно обновить принудительно


                    foreach (var outData in drawSourceFilter.GetOut())
                    {
                        foreach (var rct in rectFilter.GetResultRectangles())
                        {
                            Mat dst = outData.Image.Clone();
                            int xx  = rct.X + IntPropertys["ShiftX"].Value;
                            int yy  = rct.Y + IntPropertys["ShiftY"].Value;
                            int ww  = rct.Width;
                            int hh  = rct.Height;

                            if (xx > outData.Image.Width)
                            {
                                xx = outData.Image.Width;
                            }

                            if (yy > outData.Image.Height)
                            {
                                xx = outData.Image.Height;
                            }

                            if ((ww + xx) > outData.Image.Width)
                            {
                                ww = outData.Image.Width - xx;
                            }

                            if ((hh + yy) > outData.Image.Height)
                            {
                                hh = outData.Image.Height - yy;
                            }

                            Rectangle rect = new Rectangle(xx, yy, ww, hh);

                            if (m_rectangles.Count == 0)
                            {
                                m_rectangles.Add(rect); // буду делать только один ректангл, на все GetOut's, тут множить смысла не даёю, да лишний CropRectFilter делает
                            }
                            if (bDraw)
                            {
                                CvInvoke.Rectangle(dst, rect, drawColor, 3);
                            }

                            this.m_out.Add(new DataSrc(dst, outData.Info, false));
                        }
                    }
                }
            }
            catch { return(false); }
            return(true);
        }