/// <summary> /// 获得3*3相机内参矩阵 /// </summary> // public ME GetIntrinsicMatrix() { ME intrinsicMatrix = new ME(3, 3, DepthType.Cv64F); double[] data = new double[] { f, 0, cx, 0, f, cy, 0, 0, 1 }; intrinsicMatrix.SetTo <double>(data); return(intrinsicMatrix); }
/// <summary> /// 矩阵乘法 /// </summary> /// <param name="lhs">常数</param> /// <param name="rhs">矩阵</param> /// <returns>结果</returns> public static ME operator *(double rhs, ME lhs) { dynamic data1 = lhs.ToArray(); double[] result = new double[lhs.Rows * lhs.Cols]; for (int i = 0; i < data1.Length; i++) { result[i] = data1[i] * rhs; } ME mat = new ME(lhs.Rows, lhs.Cols, DepthType.Cv64F); mat.SetTo <double>(result); return(mat); }
/// <summary> /// 矩阵乘法 /// </summary> /// <param name="lhs">左矩阵</param> /// <param name="rhs">右矩阵</param> /// <returns>结果</returns> public static ME operator *(ME lhs, ME rhs) { if (lhs.Cols != rhs.Rows) { return(null); } double[] result = new double[lhs.Rows * rhs.Cols]; for (int i = 0; i < lhs.Rows * rhs.Cols; i++) { result[i] = lhs.Row(i / rhs.Cols).Dot(rhs.Col(i % rhs.Cols).T()); } ME mat = new ME(lhs.Rows, rhs.Cols, DepthType.Cv64F); mat.SetTo <double>(result); return(mat); }
/// <summary> /// 矩阵减法 /// </summary> /// <param name="lhs">左矩阵</param> /// <param name="rhs">右矩阵</param> /// <returns>结果</returns> public static ME operator -(ME lhs, ME rhs) { if (lhs.Rows != rhs.Rows || lhs.Cols != rhs.Cols) { return(null); } dynamic data1 = lhs.ToArray(); dynamic data2 = rhs.ToArray(); double[] result = new double[lhs.Rows * lhs.Cols]; for (int i = 0; i < data1.Length; i++) { result[i] = data1[i] - data2[i]; } ME mat = new ME(lhs.Rows, lhs.Cols, DepthType.Cv64F); mat.SetTo <double>(result); return(mat); }