как применять OpenCvSharp FitLine

Я использую OpenCvSharp с C# и не могу найти, как применить метод 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.OpenCVException» возникло в OpenCvSharp.dll, но не было обработано в пользовательском коде.

Дополнительная информация: (is2d || is3d) && (points.depth() == CV_32F || points.depth() == CV_32S)

Я изменил source, используя source.ConvertTo(source, MatType.CV_32F, 1.0 / 255.0);, чтобы соответствовать MatType CV_32F в сообщении об ошибке, но была показана та же ошибка.

В качестве второй пробной версии перейдите по этой ссылке, код ниже вызывает исключение защиты памяти.

    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?


person Youngjae    schedule 13.11.2015    source источник


Ответы (1)


Я просто издевался над этим тестом ниже, основываясь на этом 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);
person Darren    schedule 11.02.2016