목표를 달성하는 데는 여러 가지 방법이 있습니다. 나는 OpenCvSharp를위한 코드를 제공 할 것이고, 그것은 일반 C++과 비슷할 것이다.
이미지 주위에 중립적 인 경계선을 추가하십시오. 예를 들어, 원본 이미지 주위에 10-20 픽셀의 흰색을 추가 할 수 있습니다. 허위 윤곽을 만들 수 있지만 이미지의 대상 부분은 더 이상 구석에 있지 않습니다.
Mat img = Cv2.ImRead("test.jpg");
Mat imgExtended = new Mat(new OpenCvSharp.Size(img.Size().Width + 40, img.Size().Height + 40), MatType.CV_8UC3, Scalar.White);
OpenCvSharp.Rect roi = new OpenCvSharp.Rect(new OpenCvSharp.Point(20, 20), img.Size());
img.CopyTo(imgExtended.SubMat(roi));
img = imgExtended;
Mat coloredImage = img.Clone();
Cv2.CvtColor(img, img, ColorConversionCodes.BGR2GRAY);
OpenCvSharp.Point[][] contours;
HierarchyIndex[] hierarchy;
Cv2.Canny(img, result, 80, 150);
Cv2.FindContours(result, out contours, out hierarchy, RetrievalModes.External, ContourApproximationModes.ApproxSimple);
당신은 사실상 흰색 배경을 가지고 있습니다. thresholding 작업을 수행 한 다음 가장 큰 blob을 가져올 수 있습니다.
업데이트. 두 경우 모두 이미지 상단에 어두운 선이 있고 왼쪽 모서리에 어두운 영역이 여전히 문제가 될 수 있습니다. 이 경우 기능
double Cv2.ContourArea(Point[] Contour);
하여 큰 지역에 윤곽을 선택하고 오류를 최소화 할 수있는 경계 상자를 만들려고 할 수 있습니다.
몇 가지 샘플 이미지 또는 다른 관련 이미지를 공유하는 것이 좋습니다. –
편집 용 Thx! 물론 샘플 첨부 : [sample1] (http://s019.radikal.ru/i632/1409/e3/9b867ca286a7.jpg), [sample2] (http://i003.radikal.ru/1409/12/990fc8613b1f .jpg) –