OpenCV颜色浓度直方图

9
我正在使用OpenCV开发一个ANPR系统,看到一些文章中提到了字符分割的方法。其思路是制作一个展示图,显示整个图像中颜色集中程度的图形。
那我该如何操作呢?
这就是我的图像:
我需要检测黑色区域的位置,以此来识别每个字符。
我已经尝试逐像素累加数值,但在Android上运行时间过长,无法接受。

这是什么图片?你想做什么?请尽量添加更多关于你所拥有和想要做的事情的细节。 - Adi Shavit
那么你现在有黑色区域的位置了吗?你能否提供一段代码片段来说明你所说的“逐像素添加值”是什么意思? - mathematical.coffee
如果速度是您唯一的问题,那么建议将输入图像按2倍或4倍的比例缩小到较低分辨率。对于您想执行的任务,您展示的输入图像具有非常高的分辨率。 - jilles de wit
2个回答

7

好的,一个月后了,但我为您写了一些代码(使用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)

为了加快速度,您不需要修改图像文件,只需修改采样的二进制宽度(脚本中的column_width),显然这样会失去一些分辨率(如下图所示)。在图像中,我展示了使用1、10和100的column_width对您的文件进行绘制hist的结果。它们分别运行了0.11、0.02和0.01秒。我还用PIL编写了它,但它运行速度要慢5到10倍。

character density histograms


-2

查看OpenALPR(http://www.openalpr.com)。 它使用直方图进行字符分割。 在桌面上速度相当快,但我不确定在Android上速度会有多快。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接