Моя цель - извлечь тип удостоверения личности и имя владельца удостоверения личности, отсканировав изображение удостоверения личности с помощью Emgu CV. Прямо сейчас я пытаюсь обнаружить текстовые области на отсканированном изображении.
Как видно из моих изображений ниже, некоторые нетекстовые файлы обнаруживаются.
Как мне избавиться от обнаружения нетекстовых файлов? Может ли быть какой-то другой способ сделать это? Или есть какие-то изменения или дополнения в коде, которые я мог бы сделать?
private static List<Rectangle> GetTextArea(Mat image)
{
double scale = 1.5;
CvInvoke.Resize(image, image, Size.Empty, scale, scale);
List<Rectangle> contour = new List<Rectangle>();
using (Mat gray = new Mat())
using (Mat threshold = new Mat())
using (Mat dilate = new Mat())
using (Mat hierarchy = new Mat())
{
CvInvoke.CvtColor(image, gray, ColorConversion.Bgr2Gray);
CvInvoke.EqualizeHist(gray, gray);
CvInvoke.Threshold(gray, threshold, 75, 255, ThresholdType.BinaryInv);
using (Mat kernel = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new Size(21, 3), new Point(-1, -1)))
{
CvInvoke.MorphologyEx(threshold, dilate, MorphOp.Close, kernel, new Point(-1, -1), 1, BorderType.Constant, new MCvScalar());
}
VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
CvInvoke.FindContours(dilate, contours, hierarchy, RetrType.External, ChainApproxMethod.ChainApproxNone);
for (int i = 0; i < contours.Size; i++)
{
Rectangle rectangle = CvInvoke.BoundingRectangle(contours[i]);
if (rectangle.Width > rectangle.Height && rectangle.Height < 80 && rectangle.Height > 10)
{
contour.Add(rectangle);
}
}
}
return contour;
}
Вот imgur альбом оригинальных изображений и обнаружение текстовой области, которые я пытался.