如何在OpenCVSharp中使用OutputArray?

问题描述

我正在尝试在OpenCVSharp中使用函数word。它应该返回约{Curve}参数的lst1[sapply(lst1,word,1) %in% c("CASH","BONDS")] (在C ++中为Cv2.ApproxpolyDP)。此参数的类型为List<Point>。我似乎无法做出这样的决定,而且文档很少。

似乎没有Vector<Point>的构造函数,我也不能将其转换为OutputArray。有人可以让我知道(最好是使用代码)如何调用OutputArray并获得List<Point>的roxCurve参数吗?

谢谢!

解决方法

当前版本显示“类型应与输入曲线的类型匹配”。

您应该能够将OutputArray转换为Mat,然后使用ToArray()获取点列表。

这行吗?

OutputArray output;
Cv2.ApproxPolyDP(...,output,...);
var list = output.ToMat().ToArray();

编辑:刚刚意识到ToArray()是我们编写的扩展方法。这可能会有所帮助(无需转换为CV_64F)。

    public static double[,] To2DArray(this Mat mat)
    {
        mat.ConvertTo(mat,MatType.CV_64F);
        if (mat.Rows <= 1)
        {
            m_Log.WarnFormat("1D Mat converted to 2D array,size={0}x{1}",mat.Rows,mat.Cols);
        }
        double[,] arr = new double[mat.Rows,mat.Cols];
        mat.GetArray(0,arr);

        return arr;
    }

    public static double[] ToArray(this Mat mat)
    {
        double[,] array2d = mat.To2DArray();

        int rowCount = array2d.GetLength(0);

        double[] array = new double[rowCount];
        for (int i = 0; i < rowCount; i++)
        {
            array[i] = array2d[i,0];
        }
        return array;
    }