2015-05-12 3 views
2

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

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

Это код, я пытаюсь перевести в OpenCvSharp Detect barcodes in python

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

+1

Что именно вы задали? Point2f - 2d координата с плавающей запятой, а Mat - растровый. – msmith81886

+0

Im пытается перевести этот код в Python для openCvSharp, где с циновки Прямоугольник = cv2.minAreaRect (с) коробка = np.int0 (cv2.cv.BoxPoints (Прямоугольник)) –

+0

Вы можете подкинуть код фрагмент кода? Это должно помочь мне выяснить, с чего начать. Проблема в том, что точки и маты - разные объекты. Один - это конкретное место, а другое - объект сетки. Я видел, что у Точек есть странные вещи, поэтому я открыт для идей. – msmith81886

ответ

1

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

Я смог получить эту работу Select ing как 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"); 
}