private void Btn_DrawSelect_Click(object sender, RoutedEventArgs e) { int selectIndex = LV_trajectoryInfo.SelectedIndex; if (LV_trajectoryInfo.SelectedIndex < 0) { MessageBox.Show("please select items"); return; } int Igen = TrajectoryInfoDataCollection[selectIndex].Gen; int Iseg = TrajectoryInfoDataCollection[selectIndex].Segment; int Iobj = TrajectoryInfoDataCollection[selectIndex].Object; string Itra = TrajectoryInfoDataCollection[selectIndex].Trajectory; if (Itra == "Abs") { demoTask.generations[Igen].segments[Iseg].AbsoluteTrajectory.DrawOn(mat, new Point(0, 0), demoTask.environment.DemoObject[Iobj].Color); } else if (Itra == "Rel") { demoTask.generations[Igen].segments[Iseg].RelativeTrajectory[Iobj].DrawOn(mat, demoTask.environment.DemoObject[Iobj].Position, demoTask.environment.DemoObject[Iobj].Color, 4, 1); } image1.Source = MyInvoke.MatToBitmap(mat); //BitmapSourceConvert.ToBitmapSource(mat); }
private void Button_Click(object sender, RoutedEventArgs e) { Mat mat = new Mat(500, 500, DepthType.Cv8U, 3); myChart chart = new myChart(); myChart.Table table = new myChart.Table(); table.rect_outerBox = new System.Drawing.Rectangle(10, 10, 480, 480); table.rect_innerBox = new System.Drawing.Rectangle(30, 30, 440, 440); table.row_count = 3; table.column_count = 4; chart.drawTable(mat, table); myChart.Value value = new myChart.Value(); value.col = 2; value.row = 3; chart.drawValue(mat, table, value); //Random rnd = new Random(); //Task.Run(() => //{ // while (true) // { // MyInvoke.setToZero(ref mat); // CvInvoke.Circle(mat, new Point((int)(rnd.NextDouble() * 500.0), (int)(rnd.NextDouble() * 500.0)), 5, new MCvScalar(200, 200, 200), -1); // this.Dispatcher.Invoke((Action)(() => { image_main.Source = MyInvoke.MatToBitmap(mat); })); // } //}); image_main.Source = MyInvoke.MatToBitmap(mat); }
private void ImageUpdate() { MyInvoke.setToZero(ref mat); //mat.SetTo(new byte[600 * 600 * 3]); MyInvoke.AddLayer(mat, mat_layer_drag); demoTask?.drawObjectOn(mat, objectLayerKey); image1.Source = MyInvoke.MatToBitmap(mat); //BitmapSourceConvert.ToBitmapSource(mat); }
private void Btn_countKeyPoint_Click(object sender, RoutedEventArgs e) { int selectIndex = LV_trajectoryInfo.SelectedIndex; if (LV_trajectoryInfo.SelectedIndex < 0) { MessageBox.Show("please select items"); return; } int Igen = TrajectoryInfoDataCollection[selectIndex].Gen; int Iseg = TrajectoryInfoDataCollection[selectIndex].Segment; int Iobj = TrajectoryInfoDataCollection[selectIndex].Object; string Itra = TrajectoryInfoDataCollection[selectIndex].Trajectory; demoTask.ZeroAllKeys(); for (int G = 0; G < demoTask.generations.Count() - 1; G++)//generations 會多一 ,因為示範結束就++,但還沒示範就進到這裡了 { if (G == Igen) { continue; } for (int S = 0; S < demoTask.generations[0].segments.Count(); S++)//all generations have same count of segments { if (Itra == "Abs") { CompareTwoTrajectory( demoTask.generations[Igen].segments[S].AbsoluteTrajectory, demoTask.generations[G].segments[S].AbsoluteTrajectory, 20); } else if (Itra == "Rel") { CompareTwoTrajectory( demoTask.generations[Igen].segments[S].RelativeTrajectory[Iobj], demoTask.generations[G].segments[S].RelativeTrajectory[Iobj], 20); } } } //draw int threshold = demoTask.generations.Count() - 2;// 示範完會++ 所以少一,互相比較,所以若N代又要全部都是key 會需要N-1個(比喻:雙循環賽 全贏) if (Itra == "Abs") { demoTask.generations[Igen].segments[0].AbsoluteTrajectory.DrawKeyOn(mat, new Point(0, 0), threshold, new MCvScalar(55, 5, 200)); } else if (Itra == "Rel") { demoTask.generations[Igen].segments[0].RelativeTrajectory[Iobj].DrawKeyOn(mat, demoTask.environment.DemoObject[Iobj].Position, threshold, new MCvScalar(55, 5, 200), 4, 1); } image1.Source = MyInvoke.MatToBitmap(mat); //BitmapSourceConvert.ToBitmapSource(mat); }
private void Btn_DrawChecked_Click(object sender, RoutedEventArgs e) { for (int i = 0; i < TrajectoryInfoDataCollection.Count(); i++) { if (TrajectoryInfoDataCollection[i].isChecked == true) { int Igen = TrajectoryInfoDataCollection[i].Gen; int Iseg = TrajectoryInfoDataCollection[i].Segment; int Iobj = TrajectoryInfoDataCollection[i].Object; string Itra = TrajectoryInfoDataCollection[i].Trajectory; if (Itra == "Abs") { demoTask.generations[Igen].segments[Iseg].AbsoluteTrajectory.DrawOn(mat, new Point(0, 0), demoTask.environment.DemoObject[Iobj].Color); } else if (Itra == "Rel")//relative才會有 誰為原點的問題 { int interactObject = demoTask.generations[Igen].segments[Iseg].InteractObjectIndex; //這裡的color要注意,因為可能是別人在動,只是以自己為原點,所以不能畫 自己顏色的路徑,會誤會。 demoTask.generations[Igen].segments[Iseg].RelativeTrajectory[Iobj].DrawOn(mat, demoTask.environment.DemoObject[Iobj].Position, demoTask.environment.DemoObject[interactObject].Color, 4, 1); } } } image1.Source = MyInvoke.MatToBitmap(mat); //BitmapSourceConvert.ToBitmapSource(mat); }
private void Btn_InductiveSegment_Click(object sender, RoutedEventArgs e) { //按下 開始計算 ,就不要這次路徑了 demoTask.environment.AbortThisSeg(); ClearBoard(); demoTask.ZeroAllKeys(); int segmentIndex = 0; for (; segmentIndex < demoTask.generations[0].segments.Count(); segmentIndex++) { for (int G = 1; G < demoTask.generations.Count() - 1; G++)//generations 會多一 ,因為示範結束就++,但還沒示範就進到這裡了 { //ABS 比較 CompareTwoTrajectory( demoTask.generations[0].segments[segmentIndex].AbsoluteTrajectory, demoTask.generations[G].segments[segmentIndex].AbsoluteTrajectory, absToleranceRange, ignoreStartValue); //Rel 比較 for (int O = 0; O < demoTask.environment.DemoObject.Count(); O++) { CompareTwoTrajectory( demoTask.generations[0].segments[segmentIndex].RelativeTrajectory[O], demoTask.generations[G].segments[segmentIndex].RelativeTrajectory[O], relToleranceRange, ignoreStartValue); } //注意!! key path 只存到 generations[0] } //draw keyPath on UI int threshold = demoTask.generations.Count() - 2;// 示範完會++ 所以少一,互相比較,所以若N代又要全部都是key 會需要N-1個(比喻:雙循環賽 全贏) demoTask.generations[0].segments[segmentIndex].AbsoluteTrajectory.DrawKeyOn(mat, new Point(0, 0), threshold, new MCvScalar(55, 5, 200)); for (int O = 0; O < demoTask.environment.DemoObject.Count(); O++) { demoTask.generations[0].segments[segmentIndex].RelativeTrajectory[O].DrawKeyOn(mat, demoTask.environment.DemoObject[O].Position, threshold, new MCvScalar(55, 5, 200), 4, 1); } int interactObject = demoTask.generations[0].segments[segmentIndex].InteractObjectIndex; List <Point> path = new List <Point>(); for (int k = 0; k < demoTask.generations[0].segments[segmentIndex].AbsoluteTrajectory.PathKeyMatch.Count(); k++)//PathKeyCount.Count() 都會一樣 { if (demoTask.generations[0].segments[segmentIndex].AbsoluteTrajectory.PathKeyMatch[k] >= threshold) { path.Add(demoTask.generations[0].segments[segmentIndex].AbsoluteTrajectory.PathList[k]); } else { //RelativeTrajectory 有多個物件 for (int O = 0; O < demoTask.environment.DemoObject.Count(); O++) { if (demoTask.generations[0].segments[segmentIndex].RelativeTrajectory[O].PathKeyMatch[k] >= threshold) { Point Pr = new Point(demoTask.generations[0].segments[segmentIndex].RelativeTrajectory[O].PathList[k].X + demoTask.environment.DemoObject[O].Position.X, demoTask.generations[0].segments[segmentIndex].RelativeTrajectory[O].PathList[k].Y + demoTask.environment.DemoObject[O].Position.Y); path.Add(Pr); break; } } } } if (path.Count() == 0) { MessageBox.Show("No key path found!"); return; } //draw CvInvoke.Line(mat, demoTask.environment.DemoObject[interactObject].Position, path[0], demoTask.environment.DemoObject[interactObject].Color, 2); for (int i = 1; i < path.Count(); i++) { CvInvoke.Line(mat, path[i - 1], path[i], demoTask.environment.DemoObject[interactObject].Color, 2); } } // ImageUpdate(); image1.Source = MyInvoke.MatToBitmap(mat); //BitmapSourceConvert.ToBitmapSource(mat); }