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); }
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; }); })); }
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); }
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; })); }
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(); } }
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; } })); }
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); }
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(); }
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); }
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); } }
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); } } }
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); } } } } }
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"); }
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); }