コード例 #1
0
        public override void Show(object value)
        {
            var tracking = (KeyPointOpticalFlow)value;
            var image    = tracking.CurrentKeyPoints.Image;
            var output   = new IplImage(image.Size, IplDepth.U8, 3);

            CV.CvtColor(image, output, ColorConversion.Gray2Bgr);
            Draw(output, tracking);
            base.Show(output);
        }
コード例 #2
0
ファイル: TldTracker.cs プロジェクト: bonsai-rx/tld
        public override IObservable <TrackedComponent> Process(IObservable <IplImage> source)
        {
            return(Observable.Defer(() =>
            {
                var tracker = new TrackerTld();
                var inputRoi = new Rect();
                var initialized = false;
                return source.Select(input =>
                {
                    var frame = input;
                    if (input.Channels == 3)
                    {
                        frame = new IplImage(input.Size, input.Depth, 1);
                        CV.CvtColor(input, frame, ColorConversion.Bgr2Gray);
                    }

                    tracker.TrackerEnabled = Tracking;
                    tracker.DetectorEnabled = Detection;
                    tracker.LearningEnabled = Learning;
                    tracker.Alternating = Alternating;
                    if (inputRoi != RegionOfInterest)
                    {
                        tracker.Init(frame);
                        inputRoi = RegionOfInterest;
                        tracker.SelectObject(frame, inputRoi);
                        initialized = true;
                    }

                    var component = new TrackedComponent();
                    if (initialized)
                    {
                        tracker.ProcessImage(frame);
                        if (tracker.CurrentBoundingBox.HasValue)
                        {
                            var boundingBox = tracker.CurrentBoundingBox.Value;
                            component.Area = boundingBox.Width * boundingBox.Height;
                            component.Centroid = new Point2f(
                                boundingBox.X + boundingBox.Width / 2f,
                                boundingBox.Y + boundingBox.Height / 2f);
                            component.Patch = input.GetSubRect(boundingBox);
                            component.Contour = new BoxContour(boundingBox);
                            component.MajorAxisLength = 0;
                            component.MinorAxisLength = 0;
                        }
                        else
                        {
                            component.Centroid = new Point2f(float.NaN, float.NaN);
                            component.Orientation = double.NaN;
                        }
                    }
                    component.Confidence = tracker.CurrentConfidence;
                    return component;
                });
            }));
        }
コード例 #3
0
ファイル: IplImageHelper.cs プロジェクト: spacelabswc/bonsai
 public static IplImage EnsureColorCopy(IplImage output, IplImage image)
 {
     output = EnsureImageFormat(output, image.Size, image.Depth, 3);
     if (image.Channels == 1)
     {
         CV.CvtColor(image, output, ColorConversion.Gray2Bgr);
     }
     else
     {
         CV.Copy(image, output);
     }
     return(output);
 }
コード例 #4
0
ファイル: ConvertColor.cs プロジェクト: aalmada/bonsai
        public override IObservable <IplImage> Process(IObservable <IplImage> source)
        {
            return(source.Select(input =>
            {
                if (conversionChanged)
                {
                    numChannels = Conversion.GetConversionNumChannels();
                    conversionChanged = false;
                }

                var output = new IplImage(input.Size, input.Depth, numChannels);
                CV.CvtColor(input, output, conversion);
                return output;
            }));
        }
コード例 #5
0
        protected override void RenderFrame()
        {
            GL.Color4(Color4.White);
            base.RenderFrame();

            if (pose != null)
            {
                GL.PointSize(5 * VisualizerCanvas.Height / 640f);
                if (labelImage == null || labelImage.Size != pose.Image.Size)
                {
                    labelImage = new IplImage(pose.Image.Size, IplDepth.U8, 4);
                    var emSize = VisualizerCanvas.Font.SizeInPoints * (labelImage.Height * LabelFontScale) / VisualizerCanvas.Font.Height;
                    labelFont = new Font(VisualizerCanvas.Font.FontFamily, emSize);
                }

                labelImage.SetZero();
                GL.Disable(EnableCap.Texture2D);
                GL.Begin(PrimitiveType.Points);
                using (var labelBitmap = new Bitmap(labelImage.Width, labelImage.Height, labelImage.WidthStep, System.Drawing.Imaging.PixelFormat.Format32bppArgb, labelImage.ImageData))
                    using (var graphics = Graphics.FromImage(labelBitmap))
                        using (var format = new StringFormat())
                        {
                            graphics.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;
                            graphics.SmoothingMode     = SmoothingMode.AntiAlias;
                            format.Alignment           = StringAlignment.Center;
                            format.LineAlignment       = StringAlignment.Center;
                            for (int i = 0; i < pose.Count; i++)
                            {
                                var hue = 180f - (i * 180f / pose.Count);
                                convertBuffer[0] = new Scalar(hue, 255, 255);
                                CV.CvtColor(convertBuffer, convertBuffer, ColorConversion.Hsv2Bgr);
                                var color = convertBuffer[0];

                                var bodyPart = pose[i];
                                var position = bodyPart.Position;
                                GL.Color3(color.Val2 / 255, color.Val1 / 255, color.Val0 / 255);
                                GL.Vertex2(NormalizePoint(position, pose.Image.Size));
                                graphics.DrawString(bodyPart.Name, labelFont, Brushes.White, position.X, position.Y);
                            }
                        }
                GL.End();

                GL.Color4(Color4.White);
                GL.Enable(EnableCap.Texture2D);
                labelTexture.Update(labelImage);
                labelTexture.Draw();
            }
        }
コード例 #6
0
ファイル: Grayscale.cs プロジェクト: aalmada/bonsai
 public override IObservable <IplImage> Process(IObservable <IplImage> source)
 {
     return(source.Select(input =>
     {
         if (input.Channels == 1)
         {
             return input;
         }
         else
         {
             var output = new IplImage(input.Size, input.Depth, 1);
             CV.CvtColor(input, output, ColorConversion.Bgr2Gray);
             return output;
         }
     }));
 }
コード例 #7
0
        public override void Show(object value)
        {
            var keyPoints = (KeyPointCollection)value;
            var image     = keyPoints.Image;
            var output    = new IplImage(image.Size, IplDepth.U8, 3);

            if (image.Channels == 1)
            {
                CV.CvtColor(image, output, ColorConversion.Gray2Bgr);
            }
            else
            {
                CV.Copy(image, output);
            }
            Draw(output, keyPoints);
            base.Show(output);
        }
コード例 #8
0
        public CLEyeSource()
        {
            ColorMode  = CLEyeCameraColorMode.CLEYE_COLOR_RAW;
            Resolution = CLEyeCameraResolution.CLEYE_VGA;
            FrameRate  = 60;

            AutoWhiteBalance = true;
            Exposure         = 511;

            source = Observable.Create <IplImage>((observer, cancellationToken) =>
            {
                return(Task.Factory.StartNew(() =>
                {
                    lock (captureLock)
                    {
                        Load();
                        try
                        {
                            while (!cancellationToken.IsCancellationRequested)
                            {
                                if (CLEye.CLEyeCameraGetFrame(camera, image.ImageData, 500))
                                {
                                    if (image.Channels == 4)
                                    {
                                        CV.CvtColor(image, output, ColorConversion.Bgra2Bgr);
                                    }

                                    observer.OnNext(output.Clone());
                                }
                            }
                        }
                        finally { Unload(); }
                    }
                },
                                             cancellationToken,
                                             TaskCreationOptions.LongRunning,
                                             TaskScheduler.Default));
            })
                     .PublishReconnectable()
                     .RefCount();
        }
コード例 #9
0
        static IplImage GetColorCopy(IplImage image)
        {
            if (image.Depth != IplDepth.U8)
            {
                var temp = new IplImage(image.Size, IplDepth.U8, image.Channels);
                CV.ConvertScale(image, temp, (double)byte.MaxValue / ushort.MaxValue);
                image = temp;
            }

            var output = new IplImage(image.Size, IplDepth.U8, 3);

            if (image.Channels == 1)
            {
                CV.CvtColor(image, output, ColorConversion.Gray2Bgr);
            }
            else
            {
                CV.Copy(image, output);
            }
            return(output);
        }
コード例 #10
0
        public override void Show(object value)
        {
            if (input != null)
            {
                var markerFrame = (MarkerFrame)value;
                var image       = new IplImage(input.Size, input.Depth, 3);
                if (showThreshold)
                {
                    var threshold = new IplImage(input.Size, input.Depth, 1);
                    var grayscale = input;
                    if (grayscale.Channels > 1)
                    {
                        CV.CvtColor(input, threshold, ColorConversion.Bgr2Gray);
                        grayscale = threshold;
                    }

                    imageThreshold.Threshold(detectMarkers.ThresholdMethod, grayscale, threshold, detectMarkers.Param1, detectMarkers.Param2);
                    CV.CvtColor(threshold, image, ColorConversion.Gray2Bgr);
                }
                else if (input.Channels == 1)
                {
                    CV.CvtColor(input, image, ColorConversion.Gray2Bgr);
                }
                else
                {
                    CV.Copy(input, image);
                }

                foreach (var marker in markerFrame.DetectedMarkers)
                {
                    marker.Draw(image, Scalar.Rgb(0, 0, 255), 2, true);
                    if (markerFrame.CameraParameters != null)
                    {
                        DrawingUtils.Draw3dCube(image, marker, markerFrame.CameraParameters);
                    }
                }

                base.Show(image);
            }
        }
コード例 #11
0
        public override void Show(object value)
        {
            var image           = (IplImage)value;
            var visualizerImage = visualizer.VisualizerImage;

            if (visualizerImage != null && image != null)
            {
                // Treat image as mask and overlay it
                if (image.Channels == 1)
                {
                    var overlay = image;
                    // If target is a color image, convert before overlay
                    if (visualizerImage.Channels == 3)
                    {
                        color = IplImageHelper.EnsureImageFormat(color, visualizerImage.Size, visualizerImage.Depth, visualizerImage.Channels);
                        CV.CvtColor(image, color, ColorConversion.Gray2Bgr);
                        overlay = color;
                    }

                    CV.Copy(overlay, visualizerImage, image);
                }
            }
        }
コード例 #12
0
 public static void GrayCapture(Capture capture)
 {
     using (var window = new NamedWindow("test"))
     {
         while (CV.WaitKey(10) < 0)                 //laisse la main
         {
             using (var src = capture.QueryFrame()) // recupere une image
             {
                 if (src == null)
                 {
                     break;
                 }
                 using (var gray = new IplImage(src.Size, IplDepth.U8, 1)) //filtre
                     using (var dstCanny = new IplImage(src.Size, IplDepth.U8, 1))
                     {
                         CV.CvtColor(src, gray, ColorConversion.Bgr2Gray);
                         CV.Canny(gray, dstCanny, 50, 50);
                         window.ShowImage(dstCanny);
                     }
             }
         }
     }
 }
コード例 #13
0
ファイル: Program.cs プロジェクト: auriou/SampleRA
        static void Main(string[] args)
        {
            //détourage
            using (var capture = Capture.CreateCameraCapture(0))
            {
                using (var window = new NamedWindow("test"))
                {
                    while (CV.WaitKey(10) < 0)                                        //laisse la main
                    {
                        using (var src = capture.QueryFrame())                        // recupere une image
                            using (var gray = new IplImage(src.Size, IplDepth.U8, 1)) //filtre
                                using (var dstCanny = new IplImage(src.Size, IplDepth.U8, 1))
                                {
                                    CV.CvtColor(src, gray, ColorConversion.Bgr2Gray);
                                    CV.Canny(gray, dstCanny, 50, 50);
                                    window.ShowImage(dstCanny);
                                }
                    }
                }
            }


            //var fileCapture = Capture.CreateFileCapture("/path/to/your/video/test.avi");
        }
コード例 #14
0
ファイル: DrawingHelper.cs プロジェクト: aalmada/bonsai
        public static void DrawConnectedComponent(IplImage image, ConnectedComponent component, Point2f offset)
        {
            if (component.Area <= 0)
            {
                return;
            }
            var centroid             = component.Centroid + offset;
            var orientation          = component.Orientation;
            var minorAxisOrientation = orientation + Math.PI / 2.0;
            var halfMajorAxis        = component.MajorAxisLength * 0.5;
            var halfMinorAxis        = component.MinorAxisLength * 0.5;
            var major1 = new Point((int)(centroid.X + halfMajorAxis * Math.Cos(orientation)), (int)(centroid.Y + halfMajorAxis * Math.Sin(orientation)));
            var major2 = new Point((int)(centroid.X - halfMajorAxis * Math.Cos(orientation)), (int)(centroid.Y - halfMajorAxis * Math.Sin(orientation)));
            var minor1 = new Point((int)(centroid.X + halfMinorAxis * Math.Cos(minorAxisOrientation)), (int)(centroid.Y + halfMinorAxis * Math.Sin(minorAxisOrientation)));
            var minor2 = new Point((int)(centroid.X - halfMinorAxis * Math.Cos(minorAxisOrientation)), (int)(centroid.Y - halfMinorAxis * Math.Sin(minorAxisOrientation)));

            if (component.Patch != null)
            {
                var target = image;
                var patch  = component.Patch;
                var mask   = patch.Channels == 1 ? patch : null;
                try
                {
                    if (component.Contour != null)
                    {
                        var rect = component.Contour.Rect;
                        mask = new IplImage(patch.Size, patch.Depth, 1);
                        mask.SetZero();
                        CV.DrawContours(mask, component.Contour, Scalar.All(255), Scalar.All(0), 0, -1, LineFlags.Connected8, new Point(-rect.X, -rect.Y));
                        if (image.Width != rect.Width || image.Height != rect.Height)
                        {
                            target = image.GetSubRect(component.Contour.Rect);
                        }
                    }

                    if (patch.Channels != target.Channels)
                    {
                        var conversion = patch.Channels > image.Channels
                            ? ColorConversion.Bgr2Gray
                            : ColorConversion.Gray2Bgr;
                        patch = new IplImage(patch.Size, patch.Depth, image.Channels);
                        CV.CvtColor(component.Patch, patch, conversion);
                    }

                    CV.Copy(patch, target, mask);
                }
                finally
                {
                    if (patch != component.Patch)
                    {
                        patch.Dispose();
                    }
                    if (mask != component.Patch)
                    {
                        mask.Dispose();
                    }
                    if (target != image)
                    {
                        target.Dispose();
                    }
                }
            }
            else if (component.Contour != null)
            {
                CV.DrawContours(image, component.Contour, Scalar.All(255), Scalar.All(0), 0, -1, LineFlags.Connected8, new Point(offset));
            }

            if (component.Contour != null)
            {
                CV.DrawContours(image, component.Contour, Scalar.Rgb(255, 0, 0), Scalar.Rgb(0, 0, 255), 0, 1, LineFlags.Connected8, new Point(offset));
            }
            CV.Line(image, major1, major2, Scalar.Rgb(0, 0, 255));
            CV.Line(image, minor1, minor2, Scalar.Rgb(255, 0, 0));
            CV.Circle(image, new Point(centroid), 2, Scalar.Rgb(255, 0, 0), -1);
        }