float[] load_image_in_channels_first_format(string path, int width, int height)
        {
            var src = OpenCvSharp.Cv2.ImRead(path);

            OpenCvSharp.Cv2.Resize(src, src, new OpenCvSharp.Size(width, height));
            var dst_bgr = new OpenCvSharp.MatOfPoint3f();

            src.ConvertTo(dst_bgr, OpenCvSharp.MatType.CV_32FC3);

            int numPixels = width * height;
            var result    = new float[3 * numPixels];
            var buffer    = dst_bgr.ToArray();
            var pos       = 0;

            for (int row = 0; row < height; row++)
            {
                for (int column = 0; column < width; column++, pos++)
                {
                    result[pos]                 = buffer[pos].X;
                    result[pos + numPixels]     = buffer[pos].Y;
                    result[pos + 2 * numPixels] = buffer[pos].Z;
                }
            }
            return(result);
        }
        void testing()
        {
            var app = new System.Windows.Application();
            var p1  = new PlotWindow(cat_filename);
            var p2  = new PlotWindow(cat_filename);

            p1.Show();
            Console.WriteLine("step 1");
            p2.Show();
            Console.WriteLine("step 2");

            // read, and resize an OpenCV matrix
            var src = OpenCvSharp.Cv2.ImRead(cat_filename);

            OpenCvSharp.Cv2.Resize(src, src, new OpenCvSharp.Size(150, 150));

            // Convert to 3 32-bit (float) channels format
            var dst_bgr = new OpenCvSharp.MatOfPoint3f();

            src.ConvertTo(dst_bgr, OpenCvSharp.MatType.CV_32FC3);

            // let's remove all the blue, green
            var buffer = dst_bgr.ToArray();

            for (int i = 0; i < buffer.Length; i++)
            {
                buffer[i].X = 0;
                buffer[i].Y = 0;
            }
            dst_bgr = new OpenCvSharp.MatOfPoint3f(150, 150, buffer);

            // let's convert it back to 3 8-bit channels
            var recovered_src = new OpenCvSharp.Mat();

            dst_bgr.ConvertTo(recovered_src, OpenCvSharp.MatType.CV_8UC3);

            // display an OpenCV matrix -- works as long as the underlying format is OpenCvSharp.MatType.CV_8UC3
            new PlotWindow(recovered_src, "from opencv").Show();

            app.Run();
        }