예제 #1
0
        public MainWindow()
        {
            InitializeComponent();
            if (false)
            {
                try
                {
                    Calib.FileRectify();
                }
                catch (Exception exc)
                {
                    Console.WriteLine(exc);
                }
            }

            var al = new List <com.veda.LinearAlg.PointFloat>();
            var ar = new List <com.veda.LinearAlg.PointFloat>();
            List <com.veda.LinearAlg.CalibRect.StereoPoints> allPts = new List <com.veda.LinearAlg.CalibRect.StereoPoints>();

            com.veda.LinearAlg.PointFloat imgSize = null;
            foreach (var iii in images)
            {
                var left = CvInvoke.Imread($"{imageDir}\\Left_{iii}.jpg");
                imgSize = new com.veda.LinearAlg.PointFloat(left.Width, left.Height);
                var right = CvInvoke.Imread($"{imageDir}\\Right_{iii}.jpg");
                var corl  = convertToPF(netCvLib.calib3d.Calib.findConers(left.ToImage <Gray, Byte>()));
                al.AddRange(corl);
                var corr = convertToPF(netCvLib.calib3d.Calib.findConers(right.ToImage <Gray, Byte>()));
                ar.AddRange(corr);

                allPts.Add(new com.veda.LinearAlg.CalibRect.StereoPoints {
                    Left = corl, Right = corr
                });
                //File.WriteAllLines($"{imageDir}\\Left_{iii}.txt", cornerToString(corl));
                //File.WriteAllLines($"{imageDir}\\Right_{iii}.txt", cornerToString(corr));
                //var ff = com.veda.LinearAlg.Calib.CalcFundm((corl), (corr));
                //Console.WriteLine(ff);
            }
            Console.WriteLine("F");
            var F = com.veda.LinearAlg.Calib.CalcFundm(al.ToArray(), ar.ToArray());

            Console.WriteLine(F);


            calres = com.veda.LinearAlg.CalibRect.Rectify(allPts, imgSize);

            projWin.Show();
            //return;
            _Capture1 = new VideoCapture(1);
            _Capture2 = new VideoCapture(0);
            //We will only use 1 frame ready event this is not really safe but it fits the purpose
            _Capture1.ImageGrabbed += ProcessFrame;
            //_Capture2.Start(); //We make sure we start Capture device 2 first
            _Capture1.Start();
            _Capture2.Start();
        }
예제 #2
0
        static com.veda.LinearAlg.PointFloat[] convertToPF(System.Drawing.PointF[] p)
        {
            var res = new com.veda.LinearAlg.PointFloat[p.Length];

            for (int i = 0; i < p.Length; i++)
            {
                res[i] = new com.veda.LinearAlg.PointFloat(p[i].X, p[i].Y);
            }
            return(res);
        }