C# 从车辆图像中提取车牌号

C# 从车辆图像中提取车牌号,c#,image-processing,aforge,anpr,C#,Image Processing,Aforge,Anpr,我正在开发一个anpr应用程序,我已设法从车辆图像中找到车牌区域 当我将这张图像输入tesseract OCR引擎时,它似乎检测到“C”之前的一个字符“L”,所以我想去掉车牌区域周围剩余的黑色像素。我可以采取什么特别的方法来解决这个问题吗?在这种情况下,我使用的是一个org.net库 干杯半自动去除车牌周围黑色像素区域的一种方法是应用过滤器四次,将泛光填充起点放置在图像的四个角 下面是一些示例代码,我在上面问题中的车牌图像副本上应用了过滤器(剪切以删除白色边框): 从所有四个角完成过滤后,将提供

我正在开发一个anpr应用程序,我已设法从车辆图像中找到车牌区域

当我将这张图像输入tesseract OCR引擎时,它似乎检测到“C”之前的一个字符“L”,所以我想去掉车牌区域周围剩余的黑色像素。我可以采取什么特别的方法来解决这个问题吗?在这种情况下,我使用的是一个org.net库


干杯

半自动去除车牌周围黑色像素区域的一种方法是应用过滤器四次,将泛光填充起点放置在图像的四个角

下面是一些示例代码,我在上面问题中的车牌图像副本上应用了过滤器(剪切以删除白色边框):

从所有四个角完成过滤后,将提供以下图像:

您可能希望尝试更浅灰色的填充颜色和不同的公差,但此示例至少可以提供一个合理的起点

更新我偶然发现了这个过滤器,它可以为您的OCR识别提供更好的起点。此过滤器只能应用于8bpp图像,例如,您可以先在原始图像上应用过滤器来解决此问题。如果在
PointedColorFloodFill
代码之前添加以下四行:

var grayFilter = new Grayscale(0.3, 0.3, 0.3);
var image = grayFilter.Apply(originalImage);

var bradleyfilter = new BradleyLocalThresholding();
bradleyfilter.ApplyInPlace(image);
并将每个RGB组件的
PointedColorFloodFill
公差降低至例如10:

filter.Tolerance = Color.FromArgb(10, 10, 10);
完全过滤的车牌现在将如下所示:


如果结果的前缀总是1个L,为什么不忽略第一个L?:-)这只是一个数字板和一个案例。OCR引擎似乎认为黑色区域作为字符的一部分,我想。因此,我的问题是消除数字周围的黑色像素区域,但它似乎抛出了一个异常,表示不支持源像素格式。有什么想法吗?根据文档,支持8bpp灰度和24bpp彩色图像。为了安全起见,也许可以在应用过滤器之前将图像克隆到8bpp图像:
var clonedImg=image.clone(origImg,PixelFormat.format8bpindexed)@hypertunes我添加了一些代码来说明洪水填充过滤。希望足够了。哇,这对我来说很有希望@Anders。我现在正在工作,我会检查一下,然后告诉你。非常感谢你的努力,伙计!你能让你的原始图像在某处下载吗?哪个过滤器正在抱怨?我意识到我的代码顺序可能有点混乱;确保您首先将原始图像传递到灰度过滤器,然后从那里开始处理灰度过滤图像。
filter.Tolerance = Color.FromArgb(10, 10, 10);