private Rect CalculateSquareRect(Mat[] contours) { if (contours.Length <= 1) { return(Rect.Empty); } Array.Sort(contours, (x, y) => y.ContourArea().CompareTo(x.ContourArea())); Mat biggestContour = contours[1]; Mat approx = new Mat(); var epsilon = 0.1f * biggestContour.ArcLength(true); Cv2.ApproxPolyDP(biggestContour, approx, epsilon, true); Rect approxRect = Cv2.BoundingRect(approx); float ar = approxRect.Width / (float)approxRect.Height; Cv2.Rectangle(frame, approxRect, Scalar.Green, 2); return(approxRect); }