Преобразовать Point2f [] в Mat [] OpenCV

Я пытаюсь преобразовать Point2f [] в Mat [] с помощью библиотеки OpenCvSharp и не знаю, с чего начать. Некоторая помощь будет принята с благодарностью.

rect = cv2.minAreaRect(c)
box = np.int0(cv2.cv.BoxPoints(rect))

Это код, который я пытаюсь перевести в OpenCvSharp Detect штрих-коды в Python

Это первый раз, когда я использую OpenCvSharp, поэтому я могу делать все на связанной странице, кроме строк, которые у меня есть.


person Dustin Cooper    schedule 12.05.2015    source источник
comment
Какова ваша цель? Point2f - это двумерная координата с плавающей запятой, а Mat представляет растр.   -  person msmith81886    schedule 12.05.2015
comment
Я пытаюсь перевести этот код в python на openCvSharp, где c - это Mat rect = cv2.minAreaRect (c) box = np.int0 (cv2.cv.BoxPoints (rect))   -  person Dustin Cooper    schedule 12.05.2015
comment
Можете ли вы подбросить фрагмент кода? Это должно помочь мне понять, с чего начать. Проблема в том, что точки и маты - разные объекты. Одно - это конкретное место, а другое - объект сетки. Я видел, как в очках хранятся странные вещи, поэтому я открыт для идей.   -  person msmith81886    schedule 12.05.2015


Ответы (1)


Я думаю, что это была IEnumerable<IEnumerable<Point>> перегрузка, которую вы искали, а не основанная на Mat.

Я смог заставить это работать, Select обозначив Point.Point и заключив в фиктивный массив. Вот весь код с использованием примера изображения из вашей ссылки:

// Using NuGet package OpenCvSharp-AnyCPU 2.4.10.20140320. 
var image = Cv2.ImRead("barcode_01.jpg");
var gray = image.CvtColor(OpenCvSharp.ColorConversion.BgraToGray);
var gradX = gray.Sobel(MatType.CV_32F, 1, 0, -1);
var gradY = gray.Sobel(MatType.CV_32F, 0, 1, -1);
var gradient = gray.EmptyClone();
Cv2.Subtract(gradX, gradY, gradient);
Cv2.ConvertScaleAbs(gradient, gradient);         
var kernel = Cv2.GetStructuringElement(StructuringElementShape.Rect, new Size(21, 7));
var closed = (gradient.Blur(new Size(9,9)).Threshold(225, 255, OpenCvSharp.ThresholdType.Binary)).MorphologyEx(OpenCvSharp.MorphologyOperation.Close, kernel);            
Mat[] contours;
var hierarchy = InputOutputArray.Create(new List<Vec4i>());            
closed.Erode(kernel, null, 4).Dilate(kernel, null, 4).FindContours(out contours, hierarchy, OpenCvSharp.ContourRetrieval.External, OpenCvSharp.ContourChain.ApproxSimple);            
var c = contours.ToList().OrderByDescending(mat => mat.ContourArea(false)).FirstOrDefault();
if (c != null)
{
    var rect = Cv2.MinAreaRect(c);
    var box = new[] { rect.Points().Select(p2f => new Point(p2f.X, p2f.Y)) };
    Cv2.DrawContours(image, box, -1, new Scalar(0, 255, 0), 3);
    image.SaveImage(@"out.png");
}
person Peter Wishart    schedule 19.05.2015