/// <summary> /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す /// </summary> /// <param name="trackbarName">トラックバーの名前</param> /// <param name="value">スライダの初期位置</param> /// <param name="max">スライダの最大値.最小値は常に 0.</param> /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param> #else /// <summary> /// Creates the trackbar and attaches it to this window /// </summary> /// <param name="trackbarName">Name of created trackbar. </param> /// <param name="value">The position of the slider</param> /// <param name="max">Maximal position of the slider. Minimal position is always 0. </param> /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param> /// <returns></returns> #endif public CvTrackbar CreateTrackbar(string trackbarName, int value, int max, CvTrackbarCallback callback) { var trackbar = new CvTrackbar(trackbarName, name, value, max, callback); trackbars.Add(trackbarName, trackbar); return(trackbar); }
/// <summary> /// 初期化 /// </summary> /// <param name="name">トラックバーの名前</param> /// <param name="window">トラックバーの親ウィンドウ名</param> /// <param name="value">スライダの初期位置</param> /// <param name="max">スライダの最大値.最小値は常に 0.</param> /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param> #else /// <summary> /// Constructor /// </summary> /// <param name="name">Trackbar name</param> /// <param name="window">Window name</param> /// <param name="value">Initial slider position</param> /// <param name="max">The upper limit of the range this trackbar is working with. </param> /// <param name="callback">Callback handler</param> #endif public CvTrackbar(string name, string window, int value, int max, CvTrackbarCallback callback) { if (string.IsNullOrEmpty(name)) { throw new ArgumentNullException(nameof(name)); } if (string.IsNullOrEmpty(window)) { throw new ArgumentNullException(nameof(window)); } this.name = name; this.window = window; this.value = value; this.max = max; this.callback = callback ?? throw new ArgumentNullException(nameof(callback)); // userdata wrapper callbackNative = (pos, ud) => callback(pos); //gchValue = GCHandle.Alloc(value, GCHandleType.Pinned); gchCallback = GCHandle.Alloc(callback); gchCallbackNative = GCHandle.Alloc(callbackNative); var callbackPtr = Marshal.GetFunctionPointerForDelegate(callbackNative); NativeMethods.HandleException( NativeMethods.highgui_createTrackbar(name, window, ref this.value, max, callbackPtr, IntPtr.Zero, out result)); if (result == 0) { throw new OpenCvSharpException("Failed to create CvTrackbar."); } }
/// <summary> /// 初期化 /// </summary> /// <param name="name">トラックバーの名前</param> /// <param name="window">トラックバーの親ウィンドウ名</param> /// <param name="value">スライダの初期位置</param> /// <param name="max">スライダの最大値.最小値は常に 0.</param> /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param> #else /// <summary> /// Constructor /// </summary> /// <param name="name">Trackbar name</param> /// <param name="window">Window name</param> /// <param name="value">Initial slider position</param> /// <param name="max">The upper limit of the range this trackbar is working with. </param> /// <param name="callback">Callback handler</param> #endif public CvTrackbar(string name, string window, int value, int max, CvTrackbarCallback callback) { if (string.IsNullOrEmpty(name)) throw new ArgumentNullException("name"); if (string.IsNullOrEmpty(window)) throw new ArgumentNullException("window"); if (callback == null) throw new ArgumentNullException("callback"); this.name = name; this.window = window; this.value = value; this.max = max; this.callback = callback; gchValue = GCHandle.Alloc(value, GCHandleType.Pinned); gchCallback = GCHandle.Alloc(callback); IntPtr callbackPtr = Marshal.GetFunctionPointerForDelegate(callback); #if DEBUG int result = NativeMethods.cvCreateTrackbar(name, window, ref value, max, callback); #else result = NativeMethods.cvCreateTrackbar(name, window, ref value, max, callbackPtr); #endif if (result == 0) throw new OpenCvSharpException("Failed to create CvTrackbar."); }
/// <summary> /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す /// </summary> /// <param name="name">トラックバーの名前</param> /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param> #else /// <summary> /// Creates the trackbar and attaches it to this window /// </summary> /// <param name="name">Name of created trackbar. </param> /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param> /// <returns></returns> #endif public CvTrackbar CreateTrackbar(string name, CvTrackbarCallback callback) { var trackbar = new CvTrackbar(name, this.name, callback); trackbars.Add(name, trackbar); return(trackbar); }
/// <summary> /// 初期化 /// </summary> /// <param name="name">トラックバーの名前</param> /// <param name="window">トラックバーの親ウィンドウ名</param> /// <param name="value">スライダの初期位置</param> /// <param name="max">スライダの最大値.最小値は常に 0.</param> /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param> #else /// <summary> /// Constructor /// </summary> /// <param name="name">Trackbar name</param> /// <param name="window">Window name</param> /// <param name="value">Initial slider position</param> /// <param name="max">The upper limit of the range this trackbar is working with. </param> /// <param name="callback">Callback handler</param> #endif public CvTrackbar(string name, string window, int value, int max, CvTrackbarCallback callback) { if (string.IsNullOrEmpty(name)) { throw new ArgumentNullException("name"); } if (string.IsNullOrEmpty(window)) { throw new ArgumentNullException("window"); } if (callback == null) { throw new ArgumentNullException("callback"); } this.name = name; this.window = window; this.value = value; this.max = max; this.callback = callback; gchValue = GCHandle.Alloc(value, GCHandleType.Pinned); gchCallback = GCHandle.Alloc(callback); IntPtr callbackPtr = Marshal.GetFunctionPointerForDelegate(callback); #if DEBUG int result = NativeMethods.cvCreateTrackbar(name, window, ref value, max, callback); #else result = NativeMethods.cvCreateTrackbar(name, window, ref value, max, callbackPtr); #endif if (result == 0) { throw new OpenCvSharpException("Failed to create CvTrackbar."); } }
/// <summary> /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す /// </summary> /// <param name="name">トラックバーの名前</param> /// <param name="value">スライダの初期位置</param> /// <param name="max">スライダの最大値.最小値は常に 0.</param> /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param> #else /// <summary> /// Creates the trackbar and attaches it to this window /// </summary> /// <param name="name">Name of created trackbar. </param> /// <param name="value">The position of the slider</param> /// <param name="max">Maximal position of the slider. Minimal position is always 0. </param> /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param> /// <returns></returns> #endif public CvTrackbar CreateTrackbar(string name, int value, int max, CvTrackbarCallback callback) { CvTrackbar trackbar = new CvTrackbar(name, this.name, value, max, callback); trackbars.Add(name, trackbar); return(trackbar); }
private void InitializeCv() { CvWindow objectSeg = new CvWindow("Thresholded View"); CvWindow colorPick = new CvWindow("Color Picker"); CvTrackbarCallback lowerHCallback = delegate(int pos) { if (this.upperH > pos) { this.lowerH = pos; } }; CvTrackbarCallback upperHCallback = delegate(int pos) { if (pos > this.lowerH) { this.upperH = pos; } }; CvTrackbarCallback lowerSCallback = delegate(int pos) { if (this.upperS > pos) { this.lowerS = pos; } }; CvTrackbarCallback upperSCallback = delegate(int pos) { if (pos > this.lowerS) { this.upperS = pos; } }; CvTrackbarCallback lowerVCallback = delegate(int pos) { if (this.upperV > pos) { this.lowerV = pos; } }; CvTrackbarCallback upperVCallback = delegate(int pos) { if (pos > this.lowerV) { this.upperV = pos; } }; CvTrackbar lowerH = colorPick.CreateTrackbar("lower H", this.lowerH, 179, lowerHCallback); CvTrackbar upperH = colorPick.CreateTrackbar("upper H", this.upperH, 179, upperHCallback); CvTrackbar lowerS = colorPick.CreateTrackbar("lower S", this.lowerS, 255, lowerSCallback); CvTrackbar upperS = colorPick.CreateTrackbar("upper S", this.upperS, 255, upperSCallback); CvTrackbar lowerV = colorPick.CreateTrackbar("lower V", this.lowerV, 255, lowerVCallback); CvTrackbar upperV = colorPick.CreateTrackbar("upper V", this.upperV, 255, upperVCallback); }
public Histogram() { // cvCalcHist // コントラストや明度をいろいろ変えられるサンプル const int histSize = 64; float[] range0 = { 0, 256 }; float[][] ranges = { range0 }; // 画像の読み込み using (IplImage srcImg = new IplImage(Const.ImageLenna, LoadMode.GrayScale)) using (IplImage dstImg = srcImg.Clone()) using (IplImage histImg = new IplImage(new CvSize(400, 400), BitDepth.U8, 1)) using (CvHistogram hist = new CvHistogram(new int[] { histSize }, HistogramFormat.Array, ranges, true)) { using (CvWindow windowImage = new CvWindow("image", WindowMode.AutoSize)) using (CvWindow windowHist = new CvWindow("histogram", WindowMode.AutoSize)) { // トラックバーが動かされた時の処理 CvTrackbar ctBrightness = null; CvTrackbar ctContrast = null; CvTrackbarCallback callback = delegate(int pos) { int brightness = ctBrightness.Pos - 100; int contrast = ctContrast.Pos - 100; // LUTの適用 byte[] lut = CalcLut(contrast, brightness); srcImg.LUT(dstImg, lut); // ヒストグラムの描画 CalcHist(dstImg, hist); DrawHist(histImg, hist, histSize); // ウィンドウに表示 windowImage.ShowImage(dstImg); windowHist.ShowImage(histImg); dstImg.Zero(); histImg.Zero(); }; // トラックバーの作成 // (OpenCVでは現在位置にポインタを渡すことでトラックバーの位置の変化が取得できるが、 // .NETではGCによりポインタが移動してしまうので廃止した。別の方法でうまく取得すべし。) ctBrightness = windowImage.CreateTrackbar("brightness", 100, 200, callback); ctContrast = windowImage.CreateTrackbar("contrast", 100, 200, callback); // 初回描画 callback(0); // キー入力待ち Cv.WaitKey(0); } } }
/// <summary> /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す /// </summary> /// <param name="name">トラックバーの名前</param> /// <param name="value">スライダの初期位置</param> /// <param name="count">スライダの最大値.最小値は常に 0.</param> /// <param name="onChange">スライダの位置が変更されるたびに呼び出されるデリゲート</param> /// <returns></returns> #else /// <summary> /// Creates the trackbar and attaches it to this window /// </summary> /// <param name="name">Name of created trackbar. </param> /// <param name="value">The position of the slider</param> /// <param name="count">Maximal position of the slider. Minimal position is always 0. </param> /// <param name="onChange">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param> /// <returns></returns> #endif public TrackbarWithLabel CreateTrackbar(string name, int value, int count, CvTrackbarCallback onChange) { var t = new TrackbarWithLabel(name, value, count, 0); t.Dock = DockStyle.Top; t.Trackbar.ValueChanged += (o, e) => { int pos = ((TrackBar)o).Value; onChange(pos); }; SetClientSize(new System.Drawing.Size(ClientSize.Width, ClientSize.Height + t.Height)); _panelTrackbar.Height += t.Height; _panelTrackbar.Controls.Add(t); return(t); }
public IplImage BuildHist(IplImage src_tmp) { const int histSize = 64; float[] range0 = { 0, 256 }; float[][] ranges = { range0 }; // 화상의 읽기 using (IplImage srcImg = new IplImage(src_tmp.Size, BitDepth.U8, 1)) using (IplImage dstImg = new IplImage(src_tmp.Size, BitDepth.U8, 1)) using (IplImage histImg = new IplImage(new CvSize(400, 400), BitDepth.U8, 1)) using (CvHistogram hist = new CvHistogram(new int[] { histSize }, HistogramFormat.Array, ranges, true)) { src_tmp.CvtColor(srcImg, ColorConversion.BgrToGray); srcImg.Copy(dstImg); using (CvWindow windowImage = new CvWindow("변환된 이미지", WindowMode.AutoSize)) using (CvWindow windowHist = new CvWindow("히스토그램", WindowMode.AutoSize)) { // 트랙바가 동작되었을 때의 처리 CvTrackbar ctBrightness = null; CvTrackbar ctContrast = null; CvTrackbarCallback callback = delegate(int pos) { int brightness = ctBrightness.Pos - 100; int contrast = ctContrast.Pos - 100; // LUT의 적용 byte[] lut = CalcLut(contrast, brightness); srcImg.LUT(dstImg, lut); // 히스토그램 그리기 CalcHist(dstImg, hist); DrawHist(histImg, hist, histSize); // 윈도우에 표시 DstHist = histImg.Clone(); windowImage.ShowImage(dstImg); windowHist.ShowImage(histImg); dstImg.Zero(); histImg.Zero(); }; // 트랙바의 작성 ctBrightness = windowImage.CreateTrackbar("명도", 100, 200, callback); ctContrast = windowImage.CreateTrackbar("대조", 100, 200, callback); // 첫회 그리기 callback(0); // 키 입력대기 Cv.WaitKey(0); } return(DstHist); } }
public Histogram() { // cvCalcHist const int histSize = 64; float[] range0 = { 0, 256 }; float[][] ranges = { range0 }; using (IplImage srcImg = new IplImage(FilePath.Image.Lenna, LoadMode.GrayScale)) using (IplImage dstImg = srcImg.Clone()) using (IplImage histImg = new IplImage(new CvSize(400, 400), BitDepth.U8, 1)) using (CvHistogram hist = new CvHistogram(new int[] { histSize }, HistogramFormat.Array, ranges, true)) { using (CvWindow windowImage = new CvWindow("image", WindowMode.AutoSize)) using (CvWindow windowHist = new CvWindow("histogram", WindowMode.AutoSize)) { CvTrackbar ctBrightness = null; CvTrackbar ctContrast = null; CvTrackbarCallback callback = delegate(int pos) { int brightness = ctBrightness.Pos - 100; int contrast = ctContrast.Pos - 100; // perform LUT byte[] lut = CalcLut(contrast, brightness); srcImg.LUT(dstImg, lut); // draws histogram CalcHist(dstImg, hist); DrawHist(histImg, hist, histSize); windowImage.ShowImage(dstImg); windowHist.ShowImage(histImg); dstImg.Zero(); histImg.Zero(); }; ctBrightness = windowImage.CreateTrackbar("brightness", 100, 200, callback); ctContrast = windowImage.CreateTrackbar("contrast", 100, 200, callback); // initial action callback(0); Cv.WaitKey(0); } } }
/// <summary> /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す /// </summary> /// <param name="trackbarName">トラックバーの名前</param> /// <param name="value">スライダの初期位置</param> /// <param name="max">スライダの最大値.最小値は常に 0.</param> /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param> #else /// <summary> /// Creates the trackbar and attaches it to this window /// </summary> /// <param name="trackbarName">Name of created trackbar. </param> /// <param name="value">The position of the slider</param> /// <param name="max">Maximal position of the slider. Minimal position is always 0. </param> /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param> /// <returns></returns> #endif public CvTrackbar CreateTrackbar(string trackbarName, int value, int max, CvTrackbarCallback callback) { var trackbar = new CvTrackbar(trackbarName, name, value, max, callback); trackbars.Add(trackbarName, trackbar); return trackbar; }
public extern static int cvCreateTrackbar(/* const char* */ String trackbar_name, /* const char* */ String window_name, /*int* */ ref int value, int count, CvTrackbarCallback on_change);
/// <summary> /// 初期化(目盛りは0~100) /// </summary> /// <param name="name">トラックバーの名前</param> /// <param name="window">トラックバーの親ウィンドウ名</param> /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param> #else /// <summary> /// Constructor (value=0, max=100) /// </summary> /// <param name="name">Trackbar name</param> /// <param name="window">Window name</param> /// <param name="callback">Callback handler</param> #endif public CvTrackbar(string name, string window, CvTrackbarCallback callback) : this(name, window, 0, 100, callback) { }
/// <summary> /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す /// </summary> /// <param name="name">トラックバーの名前</param> /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param> #else /// <summary> /// Creates the trackbar and attaches it to this window /// </summary> /// <param name="name">Name of created trackbar. </param> /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param> /// <returns></returns> #endif public CvTrackbar CreateTrackbar(string name, CvTrackbarCallback callback) { CvTrackbar trackbar = new CvTrackbar(name, this._name, callback); _trackbars.Add(name, trackbar); return trackbar; }
/// <summary> /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す /// </summary> /// <param name="name">トラックバーの名前</param> /// <param name="value">スライダの初期位置</param> /// <param name="count">スライダの最大値.最小値は常に 0.</param> /// <param name="onChange">スライダの位置が変更されるたびに呼び出されるデリゲート</param> /// <returns></returns> #else /// <summary> /// Creates the trackbar and attaches it to this window /// </summary> /// <param name="name">Name of created trackbar. </param> /// <param name="value">The position of the slider</param> /// <param name="count">Maximal position of the slider. Minimal position is always 0. </param> /// <param name="onChange">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param> /// <returns></returns> #endif public TrackbarWithLabel CreateTrackbar(string name, int value, int count, CvTrackbarCallback onChange) { var t = new TrackbarWithLabel(name, value, count, 0); t.Dock = DockStyle.Top; t.Trackbar.ValueChanged += (o, e) => { int pos = ((TrackBar)o).Value; onChange(pos); }; SetClientSize(new CvSize(ClientSize.Width, ClientSize.Height + t.Height)); _panelTrackbar.Height += t.Height; _panelTrackbar.Controls.Add(t); return t; }
/// <summary> /// ウィンドウにトラックバーを作成し、作成したトラックバーを返す /// </summary> /// <param name="name">トラックバーの名前</param> /// <param name="value">スライダの初期位置</param> /// <param name="max">スライダの最大値.最小値は常に 0.</param> /// <param name="callback">スライダの位置が変更されるたびに呼び出されるデリゲート</param> #else /// <summary> /// Creates the trackbar and attaches it to this window /// </summary> /// <param name="name">Name of created trackbar. </param> /// <param name="value">The position of the slider</param> /// <param name="max">Maximal position of the slider. Minimal position is always 0. </param> /// <param name="callback">the function to be called every time the slider changes the position. This function should be prototyped as void Foo(int);</param> /// <returns></returns> #endif public CvTrackbar CreateTrackbar(string name, int value, int max, CvTrackbarCallback callback) { CvTrackbar trackbar = new CvTrackbar(name, this.name, value, max, callback); trackbars.Add(name, trackbar); return trackbar; }
public FindContours() { // cvFindContoursm cvDrawContours // 画像中から輪郭を検出し,-1~+1までのレベルにある輪郭を描画する const int SIZE = 500; using (IplImage img = new IplImage(SIZE, SIZE, BitDepth.U8, 1)) { // 画像の初期化 img.Zero(); for (int i = 0; i < 6; i++) { int dx = (i % 2) * 250 - 30; int dy = (i / 2) * 150; if (i == 0) { for (int j = 0; j <= 10; j++) { double angle = (j + 5) * Cv.PI / 21; CvPoint p1 = new CvPoint(Cv.Round(dx + 100 + j * 10 - 80 * Math.Cos(angle)), Cv.Round(dy + 100 - 90 * Math.Sin(angle))); CvPoint p2 = new CvPoint(Cv.Round(dx + 100 + j * 10 - 30 * Math.Cos(angle)), Cv.Round(dy + 100 - 30 * Math.Sin(angle))); Cv.Line(img, p1, p2, CvColor.White, 1, LineType.AntiAlias, 0); } } Cv.Ellipse(img, new CvPoint(dx + 150, dy + 100), new CvSize(100, 70), 0, 0, 360, CvColor.White, -1, LineType.AntiAlias, 0); Cv.Ellipse(img, new CvPoint(dx + 115, dy + 70), new CvSize(30, 20), 0, 0, 360, CvColor.Black, -1, LineType.AntiAlias, 0); Cv.Ellipse(img, new CvPoint(dx + 185, dy + 70), new CvSize(30, 20), 0, 0, 360, CvColor.Black, -1, LineType.AntiAlias, 0); Cv.Ellipse(img, new CvPoint(dx + 115, dy + 70), new CvSize(15, 15), 0, 0, 360, CvColor.White, -1, LineType.AntiAlias, 0); Cv.Ellipse(img, new CvPoint(dx + 185, dy + 70), new CvSize(15, 15), 0, 0, 360, CvColor.White, -1, LineType.AntiAlias, 0); Cv.Ellipse(img, new CvPoint(dx + 115, dy + 70), new CvSize(5, 5), 0, 0, 360, CvColor.Black, -1, LineType.AntiAlias, 0); Cv.Ellipse(img, new CvPoint(dx + 185, dy + 70), new CvSize(5, 5), 0, 0, 360, CvColor.Black, -1, LineType.AntiAlias, 0); Cv.Ellipse(img, new CvPoint(dx + 150, dy + 100), new CvSize(10, 5), 0, 0, 360, CvColor.Black, -1, LineType.AntiAlias, 0); Cv.Ellipse(img, new CvPoint(dx + 150, dy + 150), new CvSize(40, 10), 0, 0, 360, CvColor.Black, -1, LineType.AntiAlias, 0); Cv.Ellipse(img, new CvPoint(dx + 27, dy + 100), new CvSize(20, 35), 0, 0, 360, CvColor.White, -1, LineType.AntiAlias, 0); Cv.Ellipse(img, new CvPoint(dx + 273, dy + 100), new CvSize(20, 35), 0, 0, 360, CvColor.White, -1, LineType.AntiAlias, 0); } // 輪郭の検出 CvSeq <CvPoint> contours; CvMemStorage storage = new CvMemStorage(); // native style Cv.FindContours(img, storage, out contours, CvContour.SizeOf, ContourRetrieval.Tree, ContourChain.ApproxSimple); contours = Cv.ApproxPoly(contours, CvContour.SizeOf, storage, ApproxPolyMethod.DP, 3, true); // wrapper style //img.FindContours(storage, out contours, ContourRetrieval.Tree, ContourChain.ApproxSimple); //contours = contours.ApproxPoly(storage, ApproxPolyMethod.DP, 3, true); // ウィンドウに表示 using (CvWindow window_image = new CvWindow("image", img)) using (CvWindow window_contours = new CvWindow("contours")) { CvTrackbarCallback onTrackbar = delegate(int pos) { IplImage cnt_img = new IplImage(SIZE, SIZE, BitDepth.U8, 3); CvSeq <CvPoint> _contours = contours; int levels = pos - 3; if (levels <= 0) // get to the nearest face to make it look more funny { //_contours = _contours.HNext.HNext.HNext; } cnt_img.Zero(); Cv.DrawContours(cnt_img, _contours, CvColor.Red, CvColor.Green, levels, 3, LineType.AntiAlias); window_contours.ShowImage(cnt_img); cnt_img.Dispose(); }; window_contours.CreateTrackbar("levels+3", 3, 7, onTrackbar); onTrackbar(3); Cv.WaitKey(); } } }