Example #1
0
        public static void SaveCalibration(Stream stream, Mat camMat, Emgu.CV.Util.VectorOfFloat distCoeffs)
        {
            var P = camMat.ToImage <Arthmetic, double>();

            TextWriter writer = new StreamWriter(stream);

            writer.WriteLine(P[0, 0]);
            writer.WriteLine(P[1, 1]);
            writer.WriteLine(P[0, 2]);
            writer.WriteLine(P[1, 2]);
            for (int i = 0; i < distCoeffs.Size; ++i)
            {
                writer.WriteLine(distCoeffs[i]);
            }
            writer.Close();
        }
Example #2
0
        private void calcPosition()
        {
            camMat     = new Mat(3, 3, Emgu.CV.CvEnum.DepthType.Cv64F, 1);
            distCoeffs = new Emgu.CV.Util.VectorOfFloat();
            MCvPoint3D32f[][] mCvPoint3D32F = new MCvPoint3D32f[allPonits.Count][];

            for (int l = 0; l < allPonits.Count; l++)
            {
                mCvPoint3D32F[l] = new MCvPoint3D32f[44];
                for (int i = 0; i < 4; i++)
                {
                    for (int j = 0; j < 11; j++)
                    {
                        int pos = (i + j * 4);
                        mCvPoint3D32F[l][pos] = new MCvPoint3D32f((10 - j) * 35.0f / 2.0f, i * 35.0f + (j % 2) * 35.0f / 2.0f, 0.0f);
                    }
                }
            }
            var sizeImg = imageList.First().Size;

            double err = Emgu.CV.CvInvoke.CalibrateCamera(mCvPoint3D32F, allPonits.ToArray(), sizeImg, camMat, distCoeffs, Emgu.CV.CvEnum.CalibType.Default, new MCvTermCriteria(100, 0.001), out Mat[] R, out Mat[] T);
Example #3
0
        public static void LoadCalibration(Stream stream, out Mat camMat, out Emgu.CV.Util.VectorOfFloat distCoeffs)
        {
            var P    = new Image <Arthmetic, double>(3, 3);
            var dist = new float[5];

            TextReader reader = new StreamReader(stream);

            P[0, 0] = double.Parse(reader.ReadLine());
            P[1, 1] = double.Parse(reader.ReadLine());
            P[0, 2] = double.Parse(reader.ReadLine());
            P[1, 2] = double.Parse(reader.ReadLine());
            P[2, 2] = 1.0;
            for (int i = 0; i < 5; ++i)
            {
                dist[i] = (float)double.Parse(reader.ReadLine());
            }
            reader.Close();

            camMat     = P.Mat;
            distCoeffs = new Emgu.CV.Util.VectorOfFloat(dist);
        }