如何改善一堆身份证上的文本区域检测?

时间:2019-05-22 10:13:13

标签: c# ocr emgucv

我的目标是通过使用Emgu CV扫描ID图像来提取ID的类型和ID持有者的姓名。现在,我正在尝试从扫描的ID图像中检测文本区域。

从下面的图片中可以看出,一些非文本被检测到。

如何摆脱被检测到的非文本?可以使用其他方法吗?还是我可以对代码进行一些调整或添加?

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 album原始图像和文本区域检测。

0 个答案:

没有答案