Я использую 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
?