我的目标是通过使用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原始图像和文本区域检测。