Example #1
0
 public IObservable <IplImage> Generate <TSource>(IObservable <TSource> source)
 {
     return(Observable.Defer(() =>
     {
         var flipBuffer = default(IplImage);
         return source.CombineEither(
             ShaderManager.WindowSource,
             (input, window) =>
         {
             IplImage temp;
             PixelType pixelType;
             PixelFormat pixelFormat;
             var rect = RegionOfInterest.GetValueOrDefault(new Rect(0, 0, window.Width, window.Height));
             var result = new IplImage(new Size(rect.Width, rect.Height), IplDepth.U8, 3);
             rect.Y = window.Height - (rect.Y + rect.Height);
             TextureHelper.PackPixelStore(result, out pixelFormat, out pixelType);
             GL.ReadPixels(rect.X, rect.Y, rect.Width, rect.Height, pixelFormat, pixelType, result.ImageData);
             if (flipBuffer == null || flipBuffer.Size != result.Size)
             {
                 flipBuffer = new IplImage(result.Size, result.Depth, result.Channels);
             }
             CV.Flip(result, flipBuffer, FlipMode.Vertical);
             temp = result;
             result = flipBuffer;
             flipBuffer = temp;
             return result;
         });
     }));
 }
Example #2
0
        public override IObservable <IplImage> Process(IObservable <Texture> source)
        {
            return(Observable.Defer(() =>
            {
                var flipBuffer = default(IplImage);
                return source.Select(texture =>
                {
                    int width, height;
                    PixelType pixelType;
                    PixelFormat pixelFormat;
                    GL.BindTexture(TextureTarget.Texture2D, texture.Id);
                    GL.GetTexLevelParameter(TextureTarget.Texture2D, 0, GetTextureParameter.TextureWidth, out width);
                    GL.GetTexLevelParameter(TextureTarget.Texture2D, 0, GetTextureParameter.TextureHeight, out height);
                    var result = new IplImage(new Size(width, height), Depth, Channels);
                    TextureHelper.PackPixelStore(result, out pixelFormat, out pixelType);
                    GL.GetTexImage(TextureTarget.Texture2D, 0, pixelFormat, pixelType, result.ImageData);

                    var flipMode = FlipMode;
                    if (flipMode.HasValue)
                    {
                        IplImage temp;
                        if (flipBuffer == null)
                        {
                            flipBuffer = new IplImage(result.Size, result.Depth, result.Channels);
                        }
                        CV.Flip(result, flipBuffer, flipMode.Value);
                        temp = result;
                        result = flipBuffer;
                        flipBuffer = temp;
                    }
                    return result;
                });
            }));
        }