예제 #1
0
 private void draw(Myimagebox myimagebox)
 {
     Visible = false;
     Size    = myimagebox.Cutrec.Size;
     if (myimagebox.OrImg != null)
     {
         using (Graphics gr = Graphics.FromImage(Image))
         {
             gr.DrawImage(myimagebox.OrImg, 0, 0, myimagebox.Cutrec, GraphicsUnit.Pixel);
         }
     }
 }
예제 #2
0
        // основная обработка объекта
        public void imagechanger(Myimagebox myimagebox, Image <Gray, byte> valfilter, Image <Gray, byte> valfilter1, Image <Bgr, byte> Imageframe, byte blur, bool c, bool d, List <Point> points, List <Point> points2, bool check, DataGridView datagridview = null, DataGridView datagridview2 = null)
        {
            // если выбран первый объект
            if (c == true)
            {
                // устанавливаем верхнюю и нижнюю границу myimagebox.g_hihg и тд - свойства myimagebox присваеваем им значения когда кликаем 1 объект
                CvInvoke.InRange(Imageframe, new ScalarArray(new MCvScalar(myimagebox.r_low, myimagebox.g_low, myimagebox.b_low)),
                                 new ScalarArray(new MCvScalar(myimagebox.r_high, myimagebox.g_high, myimagebox.b_high)), valfilter);
                CvInvoke.MedianBlur(valfilter, valfilter, blur);

                // создаем массив объектов 0 - maxind, 1 - контур, 2 - центр выделенного объекта
                object[] o = Select(valfilter);
                //=============================//
                Point xy = new Point();
                xy = (Point)o[2];
                if (xy.X > 0 && xy.Y > 0)
                {
                    // добавлеяем в структуру "точка во времени" точку и время(которое сейчас на компуктере)
                    points.Add(xy);
                    // datagridview.Rows.Add(new object[] { xy.X, xy.Y });
                }

                // рисуем линию по массиву точек - либо по безъе, если был нажат чекбокс, либо просто по точкам
                Imageframe.DrawPolyline(bezie.Rezult(points, check).ToArray(), false, new Bgr(255, 0, 0));

                //делаем  контур
                CvInvoke.DrawContours(Imageframe, (VectorOfVectorOfPoint)o[1], (short)o[0], new MCvScalar(255, 0, 0), 2);
            }


            // все тоже самое для второго выделенного объекта
            if (d == true)
            {
                CvInvoke.InRange(Imageframe, new ScalarArray(new MCvScalar(myimagebox.r_low_2, myimagebox.g_low_2, myimagebox.b_low_2)),
                                 new ScalarArray(new MCvScalar(myimagebox.r_high_2, myimagebox.g_high_2, myimagebox.b_high_2)), valfilter1);
                object[] os = Select(valfilter1);
                CvInvoke.MedianBlur(valfilter1, valfilter1, blur);
                //=============================//
                Point xy = new Point();
                xy = (Point)os[2];
                if (xy.X > 0 && xy.Y > 0)
                {
                    points2.Add(xy);

                    //datagridview2.Rows.Add(new object[] { xy.X, xy.Y });
                }
                //=============================//
                Imageframe.DrawPolyline(bezie.Rezult(points2, check).ToArray(), false, new Bgr(0, 0, 255));
                CvInvoke.DrawContours(Imageframe, (VectorOfVectorOfPoint)os[1], (short)os[0], new MCvScalar(0, 0, 255), 2);
            }
        }
        public short[] rgb(Myimagebox myimagebox)
        {
            // здесь определяем rgb от которого нужно найти диапазон
            short[] rgb = new short[3];

            // если пользователь выделел область
            if (Cutrec.Width > 50 && Cutrec.Height > 50)
            {
                mypicture picture = new mypicture(myimagebox, Cutrec.Size);
                OrImg = picture.Image; Bitmap bit = new Bitmap(OrImg, Cutrec.Size);
                rgb   = colorsdetectrer.rgb(bit, (short)myimagebox.Cutrec.Width, (short)myimagebox.Cutrec.Height);
                picture.Dispose();
                bit.Dispose();
            }
            // если просто кликул или немного выделил область
            else
            {
                rgb[0] = col.R; rgb[1] = col.G; rgb[2] = col.B;
            }
            return(rgb);
        }