我正在尝试在OpenCVSharp中使用函数OpenCVSharp。它应该返回一个List<Point> (Vector<Point> in C++)作为approxCurve参数。此参数为OutputArray类型。我似乎无法理解这一点,而且文档也很稀少。
OutputArray似乎没有构造函数,我也不能将构造函数转换为List<Point>。有人能让我知道(最好是使用代码)如何调用Cv2.ApproxPolyDP并为approxCurve参数获取一个List<Point>吗?
谢谢!
发布于 2020-10-08 16:36:24
当前版本说“类型应该与输入曲线的类型相匹配”。
您应该能够将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, 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;
}https://stackoverflow.com/questions/63821563
复制相似问题