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); } } }
// основная обработка объекта 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); }