我正在使用OpenCV的ANPR系统上工作,并在一些文章中看到了一种做字符分割的方法。这个想法是制作一个图表,显示图像上的颜色浓度。OpenCV颜色浓度直方图
我该怎么做?
这是图像,我有:
我需要检测黑色区域的位置,如上所示,以确定每个字符。
我曾尝试将像素逐像素一起添加,但我在Android上执行此操作并且所需时间不可接受。
我正在使用OpenCV的ANPR系统上工作,并在一些文章中看到了一种做字符分割的方法。这个想法是制作一个图表,显示图像上的颜色浓度。OpenCV颜色浓度直方图
我该怎么做?
这是图像,我有:
我需要检测黑色区域的位置,如上所示,以确定每个字符。
我曾尝试将像素逐像素一起添加,但我在Android上执行此操作并且所需时间不可接受。
好了,它的一个月后,但我写给你的代码(蟒蛇)这一点;)
(假设你只是图像密度直方图后)
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
),显然如果你这样做会失去一些分辨率(如下图所示)。
在图像中,我用column_width
的1,10和100显示了结果(图hist
),他们分别以0.11,0.02和0.01秒为我跑。
我也在PIL中写过,但它运行速度慢了5到10倍。
非常感谢 – 2012-03-21 13:11:30
退房OpenALPR(http://www.openalpr.com)。它以同样的方式进行字符分割(使用直方图)。它在桌面上相当快,但我不确定在Android上会有多快。
这是什么设计?你怎么做?请尝试添加更多关于您实际拥有的内容以及您想要执行的操作的详细信息。 – 2012-02-19 18:39:25
那么你现在有黑色区域的位置?你可以通过“逐个像素地增加数值”来表达你的意思吗? – 2012-02-19 23:42:24
如果速度是您唯一的问题,那么我建议您将输入图像缩放为较低分辨率的2倍甚至4倍。所显示的输入图像对于您要执行的任务而言是非常高的分辨率。 – 2012-02-20 12:49:34