public IEnumerable <Rectangle> GetAllRectangles(Bitmap img, Rectangle canny, Color color, int colorThreshold, ContourAcceptance acceptance) { var imgFiltered = FilterImage(new Image <Bgr, byte>(img), new FilterParam(color, colorThreshold)); var result = new List <Rectangle>(); using (var contours = new VectorOfVectorOfPoint()) { CvInvoke.FindContours(imgFiltered, contours, null, RetrType.List, ChainApproxMethod.LinkRuns); for (var i = 0; i < contours.Size; i++) { var contour = contours[i]; if (!acceptance.ValideSize(contour.Size)) { continue; } var area = CvInvoke.MinAreaRect(contour).MinAreaRect(); if (acceptance.ValideHeight(area.Height) && acceptance.ValideWidth(area.Width)) { result.Add(new Rectangle(new Point(area.X, area.Y), new Size(area.Width, area.Height))); } } } return(result); }
public Rectangle GetRectangle(Bitmap img, Rectangle canny, Color color, int colorThreshold, ContourAcceptance acceptance) { DebugWindow.SetImageStartFishingRaw((Bitmap)img.Clone()); var imgFiltered = FilterImage(new Image <Bgr, byte>(img), new FilterParam(color, colorThreshold)); DebugWindow.SetImageStartFishingFiltered(imgFiltered.ToBitmap()); using (var contours = new VectorOfVectorOfPoint()) { CvInvoke.FindContours(imgFiltered, contours, null, RetrType.List, ChainApproxMethod.LinkRuns); for (var i = 0; i < contours.Size; i++) { var contour = contours[i]; if (!acceptance.ValideSize(contour.Size)) { continue; } var area = CvInvoke.MinAreaRect(contour).MinAreaRect(); if (acceptance.ValideHeight(area.Height) && acceptance.ValideWidth(area.Width)) { return(new Rectangle(new Point(area.X, area.Y), new Size(area.Width, area.Height))); } } } return(Rectangle.Empty); }