我正在使用 OpenCV 开发一个 ANPR 系统,并且在一些文章中看到了一种进行字符分割的方法。这个想法是制作一个图表,显示图像中颜色的浓度。
我该怎么做呢?
这是我拥有的图像:
如上所示,我需要检测黑色区域的位置以识别每个字符。
我已经尝试逐个像素地添加值,但我在 Android 上这样做,所花费的时间是不可接受的。
我正在使用 OpenCV 开发一个 ANPR 系统,并且在一些文章中看到了一种进行字符分割的方法。这个想法是制作一个图表,显示图像中颜色的浓度。
我该怎么做呢?
这是我拥有的图像:
如上所示,我需要检测黑色区域的位置以识别每个字符。
我已经尝试逐个像素地添加值,但我在 Android 上这样做,所花费的时间是不可接受的。
好的,一个月后,但我为此写了一些代码(用python);)
(假设您刚刚在图像密度直方图之后)
import cv
im2 = cv.LoadImage('ph05l.jpg')
width, height = cv.GetSize(im2)
hist = []
column_width = 1 # this allows you to speed up the result,
# at the expense of horizontal resolution. (higher is faster)
for x in xrange(width / column_width):
column = cv.GetSubRect(im2, (x * column_width, 0, column_width, height))
hist.append(sum(cv.Sum(column)) / 3)
为了加快速度,您不需要更改图像文件,只需更改采样的 bin 宽度(column_width
在脚本中),显然如果这样做会丢失一些分辨率(如下图所示)。
在图像中,我hist
使用 1、10 和 100 显示了您的文件的结果(图形)column_width
。它们分别在 0.11、0.02 和 0.01 秒时为我运行。
我也在PIL中编写过它,但它的运行速度要慢 5 到 10 倍。
查看 OpenALPR ( http://www.openalpr.com )。它以相同的方式进行字符分割(使用直方图)。它在台式机上相当快,但我不确定在 Android 上会有多快。