Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在OpenCVSharp中使用OutputArray?_C#_Opencvsharp - Fatal编程技术网

C# 如何在OpenCVSharp中使用OutputArray?

C# 如何在OpenCVSharp中使用OutputArray?,c#,opencvsharp,C#,Opencvsharp,我正在尝试使用OpenCVSharp中的函数Cv2.ApproxPolyDP。它应该为approxCurve参数返回一个列表(向量,在C++中)。此参数的类型为OutputArray。我似乎无法理解这一点,而且文档很少 输出阵列似乎没有构造函数,我也无法将其转换为列表。有人能告诉我(最好是使用代码)如何调用Cv2.ApproxPolyDP并获取approxCurve参数的列表吗 谢谢 当前版本说“类型应与输入曲线的类型匹配” 您应该能够将OutputArray转换为Mat,然后使用ToArray

我正在尝试使用OpenCVSharp中的函数
Cv2.ApproxPolyDP
。它应该为approxCurve参数返回一个
列表
向量
,在C++中)。此参数的类型为
OutputArray
。我似乎无法理解这一点,而且文档很少

输出阵列似乎没有构造函数
,我也无法将其转换为
列表
。有人能告诉我(最好是使用代码)如何调用
Cv2.ApproxPolyDP
并获取approxCurve参数的
列表吗

谢谢

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

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

这行吗

OutputArray output;
Cv2.ApproxPolyDP(..., output, ...);
var list = output.ToMat().ToArray();
编辑:刚刚意识到ToArray()是我们编写的一个扩展方法。这可能会有所帮助(无需转换为CV_64F)

publicstaticdouble[,]到2darray(这个Mat)
{
材料转换器(材料,材料类型CV_64F);

如果(mat.Rows)您使用的OpenCVSharp的哪个版本?v4.1.0.20190416具有以下签名:公共静态点[]ApproxPolyDP(IEnumerable curve,double epsilon,bool closed);
    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, 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;
    }