首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在OutputArray中使用OpenCVSharp?

如何在OutputArray中使用OpenCVSharp?
EN

Stack Overflow用户
提问于 2020-09-10 01:26:29
回答 1查看 1.3K关注 0票数 0

我正在尝试在OpenCVSharp中使用函数OpenCVSharp。它应该返回一个List<Point> (Vector<Point> in C++)作为approxCurve参数。此参数为OutputArray类型。我似乎无法理解这一点,而且文档也很稀少。

OutputArray似乎没有构造函数,我也不能将构造函数转换为List<Point>。有人能让我知道(最好是使用代码)如何调用Cv2.ApproxPolyDP并为approxCurve参数获取一个List<Point>吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2020-10-08 16:36:24

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

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

这行得通吗?

代码语言:javascript
复制
OutputArray output;
Cv2.ApproxPolyDP(..., output, ...);
var list = output.ToMat().ToArray();

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

代码语言:javascript
复制
    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;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63821563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档