将 Point2f[] 转换为 Mat[] OpenCV
Convert Point2f[] to Mat[] OpenCV
我正在尝试使用 OpenCvSharp 库将 Point2f[] 转换为 Mat[],但不知道从哪里开始。如果能提供帮助,我们将不胜感激。
rect = cv2.minAreaRect(c)
box = np.int0(cv2.cv.BoxPoints(rect))
这是我要翻译成 OpenCvSharp 的代码
Detect barcodes in python
这是我第一次使用 OpenCvSharp,所以我可以在链接页面中执行所有操作,但我包含的行除外。
我认为这是您正在寻找的 IEnumerable<IEnumerable<Point>>
重载,而不是基于 Mat
的重载。
我能够通过 Select
ing as Point.Point
并包装在一个虚拟数组中来实现它。这是使用 link:
中的示例图片的完整代码
// 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");
}
我正在尝试使用 OpenCvSharp 库将 Point2f[] 转换为 Mat[],但不知道从哪里开始。如果能提供帮助,我们将不胜感激。
rect = cv2.minAreaRect(c)
box = np.int0(cv2.cv.BoxPoints(rect))
这是我要翻译成 OpenCvSharp 的代码 Detect barcodes in python
这是我第一次使用 OpenCvSharp,所以我可以在链接页面中执行所有操作,但我包含的行除外。
我认为这是您正在寻找的 IEnumerable<IEnumerable<Point>>
重载,而不是基于 Mat
的重载。
我能够通过 Select
ing as Point.Point
并包装在一个虚拟数组中来实现它。这是使用 link:
// 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");
}