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