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