public Delaunay() { CvRect rect = new CvRect(0, 0, 600, 600); CvColor activeFacetColor = new CvColor(255, 0, 0); CvColor delaunayColor = new CvColor(0, 0, 0); CvColor voronoiColor = new CvColor(0, 180, 0); CvColor bkgndColor = new CvColor(255, 255, 255); Random rand = new Random(); using (CvMemStorage storage = new CvMemStorage(0)) using (IplImage img = new IplImage(rect.Size, BitDepth.U8, 3)) using (CvWindow window = new CvWindow("delaunay")) { img.Set(bkgndColor); CvSubdiv2D subdiv = new CvSubdiv2D(rect, storage); for (int i = 0; i < 200; i++) { CvPoint2D32f fp = new CvPoint2D32f { X = (float)rand.Next(5, rect.Width - 10), Y = (float)rand.Next(5, rect.Height - 10) }; LocatePoint(subdiv, fp, img, activeFacetColor); window.Image = img; if (CvWindow.WaitKey(100) >= 0) { break; } subdiv.Insert(fp); subdiv.CalcVoronoi2D(); img.Set(bkgndColor); DrawSubdiv(img, subdiv, delaunayColor, voronoiColor); window.Image = img; if (CvWindow.WaitKey(100) >= 0) { break; } } img.Set(bkgndColor); PaintVoronoi(subdiv, img); window.Image = img; CvWindow.WaitKey(0); } }
/// <summary> /// ヒストグラムの描画 /// </summary> /// <param name="img"></param> /// <param name="hist"></param> /// <param name="histSize"></param> private static void DrawHist(IplImage img, CvHistogram hist, int histSize) { img.Set(CvColor.White); int binW = Cv.Round((double)img.Width / histSize); for (int i = 0; i < histSize; i++) { img.Rectangle( new CvPoint(i * binW, img.Height), new CvPoint((i + 1) * binW, img.Height - Cv.Round(hist.Bins[i])), CvColor.Black, -1, LineType.AntiAlias, 0 ); } }