Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        /// <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);
        }
Ejemplo n.º 4
0
        /// <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);
        }