public void Calculate(IplImage src) { calc = new IplImage(src.Size, BitDepth.U8, 3); IplImage src_symm = this.Symmetry(src); Cv.Add(src, src_symm, calc); CvWindow window_add = new CvWindow("Add", WindowMode.StretchImage, calc); Cv.Sub(src, src_symm, calc); CvWindow window_sub = new CvWindow("Sub", WindowMode.StretchImage, calc); Cv.Mul(src, src_symm, calc); CvWindow window_Mul = new CvWindow("Mul", WindowMode.StretchImage, calc); Cv.Div(src, src_symm, calc); CvWindow window_div = new CvWindow("Div", WindowMode.StretchImage, calc); Cv.Max(src, src_symm, calc); CvWindow window_max = new CvWindow("Max", WindowMode.StretchImage, calc); Cv.Min(src, src_symm, calc); CvWindow window_min = new CvWindow("Min", WindowMode.StretchImage, calc); Cv.AbsDiff(src, src_symm, calc); CvWindow window_absdiff = new CvWindow("AbsDiff", WindowMode.StretchImage, calc); Cv.WaitKey(0); { CvWindow.DestroyAllWindows(); } }
public IplImage InpaintImage(IplImage src) { inpaint = new IplImage(src.Size, BitDepth.U8, 3); IplImage paint = src.Clone(); IplImage mask = new IplImage(src.Size, BitDepth.U8, 1); CvWindow win_Paint = new CvWindow("Paint", WindowMode.AutoSize, paint); CvPoint prevPt = new CvPoint(-1, -1); win_Paint.OnMouseCallback += delegate(MouseEvent eve, int x, int y, MouseEvent flag) { if (eve == MouseEvent.LButtonDown) { prevPt = new CvPoint(x, y); } else if (eve == MouseEvent.LButtonUp || (flag & MouseEvent.FlagLButton) == 0) { prevPt = new CvPoint(-1, -1); } else if (eve == MouseEvent.MouseMove && (flag & MouseEvent.FlagLButton) != 0) { CvPoint pt = new CvPoint(x, y); Cv.DrawLine(mask, prevPt, pt, CvColor.White, 5, LineType.AntiAlias, 0); Cv.DrawLine(paint, prevPt, pt, CvColor.White, 5, LineType.AntiAlias, 0); prevPt = pt; win_Paint.ShowImage(paint); } }; bool repeat = true; while (repeat) { switch (CvWindow.WaitKey(0)) { case 'r': mask.SetZero(); Cv.Copy(src, paint); win_Paint.ShowImage(paint); break; case '\r': CvWindow win_Inpaint = new CvWindow("Inpainted", WindowMode.AutoSize); Cv.Inpaint(paint, mask, inpaint, 3, InpaintMethod.NS); win_Inpaint.ShowImage(inpaint); break; case (char)27: CvWindow.DestroyAllWindows(); repeat = false; break; } } return(inpaint); }
public PyrSegmentation() { // cvPyrSegmentation // レベルを指定して画像ピラミッドを作成し,その情報を用いて画像のセグメント化を行なう. const double threshold1 = 255.0; const double threshold2 = 50.0; // (1)画像の読み込み using (IplImage srcImg = new IplImage(Const.ImageGoryokaku, LoadMode.AnyDepth | LoadMode.AnyColor)) { // level1から4それぞれでやってみる IplImage[] dstImg = new IplImage[4]; for (int level = 0; level < dstImg.Length; level++) { // (2)領域分割のためにROIをセットする CvRect roi = new CvRect() { X = 0, Y = 0, Width = srcImg.Width & -(1 << (level + 1)), Height = srcImg.Height & -(1 << (level + 1)) }; srcImg.ROI = roi; // (3)分割結果画像出力用の画像領域を確保し,領域分割を実行 dstImg[level] = srcImg.Clone(); Cv.PyrSegmentation(srcImg, dstImg[level], level + 1, threshold1, threshold2); } // (4)入力画像と分割結果画像の表示 CvWindow wSrc = new CvWindow("src", srcImg); CvWindow[] wDst = new CvWindow[dstImg.Length]; for (int i = 0; i < dstImg.Length; i++) { wDst[i] = new CvWindow("dst" + i, dstImg[i]); } CvWindow.WaitKey(); CvWindow.DestroyAllWindows(); foreach (IplImage item in dstImg) { item.Dispose(); } } }
public PyrSegmentation() { const double threshold1 = 255.0; const double threshold2 = 50.0; using (IplImage srcImg = new IplImage(FilePath.Image.Goryokaku, LoadMode.AnyDepth | LoadMode.AnyColor)) { IplImage[] dstImg = new IplImage[4]; for (int level = 0; level < dstImg.Length; level++) { CvRect roi = new CvRect() { X = 0, Y = 0, Width = srcImg.Width & -(1 << (level + 1)), Height = srcImg.Height & -(1 << (level + 1)) }; srcImg.ROI = roi; dstImg[level] = srcImg.Clone(); Cv.PyrSegmentation(srcImg, dstImg[level], level + 1, threshold1, threshold2); } CvWindow wSrc = new CvWindow("src", srcImg); CvWindow[] wDst = new CvWindow[dstImg.Length]; for (int i = 0; i < dstImg.Length; i++) { wDst[i] = new CvWindow("dst" + i, dstImg[i]); } CvWindow.WaitKey(); CvWindow.DestroyAllWindows(); foreach (IplImage item in dstImg) { item.Dispose(); } } }
public Inpaint() { // cvInpaint Console.WriteLine( "Hot keys: \n" + "\tESC - quit the program\n" + "\tr - restore the original image\n" + "\ti or ENTER - run inpainting algorithm\n" + "\t\t(before running it, paint something on the image)\n" + "\ts - save the original image, mask image, original+mask image and inpainted image to desktop." ); using (IplImage img0 = new IplImage(FilePath.Image.Fruits, LoadMode.AnyDepth | LoadMode.AnyColor)) { using (IplImage img = img0.Clone()) using (IplImage inpaintMask = new IplImage(img0.Size, BitDepth.U8, 1)) using (IplImage inpainted = img0.Clone()) { inpainted.Zero(); inpaintMask.Zero(); using (CvWindow wImage = new CvWindow("image", WindowMode.AutoSize, img)) { CvPoint prevPt = new CvPoint(-1, -1); wImage.OnMouseCallback += delegate(MouseEvent ev, int x, int y, MouseEvent flags) { if (ev == MouseEvent.LButtonUp || (flags & MouseEvent.FlagLButton) == 0) { prevPt = new CvPoint(-1, -1); } else if (ev == MouseEvent.LButtonDown) { prevPt = new CvPoint(x, y); } else if (ev == MouseEvent.MouseMove && (flags & MouseEvent.FlagLButton) != 0) { CvPoint pt = new CvPoint(x, y); if (prevPt.X < 0) { prevPt = pt; } inpaintMask.Line(prevPt, pt, CvColor.White, 5, LineType.AntiAlias, 0); img.Line(prevPt, pt, CvColor.White, 5, LineType.AntiAlias, 0); prevPt = pt; wImage.ShowImage(img); } }; for (; ;) { switch ((char)CvWindow.WaitKey(0)) { case (char)27: // exit CvWindow.DestroyAllWindows(); return; case 'r': // restore original image inpaintMask.Zero(); img0.Copy(img); wImage.ShowImage(img); break; case 'i': // do Inpaint case '\r': CvWindow wInpaint = new CvWindow("inpainted image", WindowMode.AutoSize); img.Inpaint(inpaintMask, inpainted, 3, InpaintMethod.Telea); wInpaint.ShowImage(inpainted); break; case 's': // save images string desktop = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); img0.SaveImage(Path.Combine(desktop, "original.png")); inpaintMask.SaveImage(Path.Combine(desktop, "mask.png")); img.SaveImage(Path.Combine(desktop, "original+mask.png")); inpainted.SaveImage(Path.Combine(desktop, "inpainted.png")); break; } } } } } }