如何应用OpenCvSharp FitLine

本文关键字:OpenCvSharp FitLine 应用 何应用 | 更新日期: 2023-09-27 18:21:41

我在C#中使用OpenCvSharp,找不到如何应用FitLine方法。

public static void Apply(Bitmap bitmap)
{
    using (Mat source = bitmap.ToMat())
    {
        var output = new List<OpenCvSharp.CPlusPlus.Vec4f>(); // I don't know which variable is accepted.
        Cv2.FitLine(source, OutputArray.Create(output), DistanceType.L2, 0, 0.01, 0.01);
        Debug.WriteLine(output);
    }
}

FitLine方法中发生异常,错误消息如下。

OpenCvSharp.dll中发生类型为"OpenCv夏普.OpenCVException"的异常,但未在用户代码中处理

附加信息:(is2d||is3d)&amp;(points.depth()==CV_32F||points.depth()==CV_32S)

为了匹配错误消息中的MatType CV_32F,我使用source.ConvertTo(source, MatType.CV_32F, 1.0 / 255.0);更改了source,但显示了相同的错误。

作为第二次尝试,参考这个链接,下面的代码抛出内存保护异常。

    using (Mat source = bitmap.ToMat())
    {
        var input = new List<OpenCvSharp.CPlusPlus.Point2f>();
        for (int i = 0; i < source.Width; i++)
        {
            for (int j = 0; j < source.Height; j++)
            {
                if (source.At<byte>(i, j) > 0)
                    input.Add(new Point2f(i, j));
            }
        }
        var output = new List<OpenCvSharp.CPlusPlus.Vec4f>();
        Cv2.FitLine(InputArray.Create(input), OutputArray.Create(output), DistanceType.L2, 0, 0.01, 0.01);
        Debug.WriteLine(output);
        return source.ToBitmap();
    }

如何正确应用FitLine

如何应用OpenCvSharp FitLine

我只是在下面根据这个url模拟了这个测试http://answers.opencv.org/question/14547/fitline-always-crashes/?answer=14550#post-id-14550,它似乎起作用。此示例使用OpenCvSharp 3.1。

List<Point2f> points = new List<Point2f>();
points.Add(new Point2f(3, 3));
points.Add(new Point2f(4, 4));
points.Add(new Point2f(5, 5));
Line2D line = Cv2.FitLine(points, DistanceTypes.L2, 0, 0.01, 0.01);