OpenCV 颜色浓度直方图

Posted

技术标签:

【中文标题】OpenCV 颜色浓度直方图【英文标题】:OpenCV Color Concentration Histogram 【发布时间】:2012-03-10 05:05:26 【问题描述】:

我正在使用 OpenCV 开发一个 ANPR 系统,并且在一些文章中看到了一种进行字符分割的方法。我们的想法是制作一个图表,显示图像中颜色的浓度。

我该怎么做?

这是我的图片:

我需要检测黑色区域的位置,如上所示,以识别每个字符。

我已经尝试逐个像素地添加值,但我在 android 上这样做,所花费的时间是不可接受的。

【问题讨论】:

这张图片是什么?你怎么做?请尝试添加更多关于您实际拥有什么以及您想做什么的详细信息。 那么你目前有黑色区域的位置吗?您可以为“逐个像素添加值”的意思写一段代码吗? 如果速度是您唯一的问题,那么我建议您将输入图像缩放到较低的分辨率 2 甚至 4 倍。您显示的输入图像对于您的任务来说是非常高分辨率的想要表演。 【参考方案1】:

好的,一个月后,但我为此写了一点代码(在 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 倍。

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于OpenCV 颜色浓度直方图的主要内容,如果未能解决你的问题,请参考以下文章

仅考虑特定像素(而非完整图像)的OpenCV颜色直方图calcHist

OpenCV中直方图反向投影算法详解与实现

opencv 的saliency API 怎么用

OpenCV RGB直方图计算与绘制----calcHist()函数normalize()函数

OpenCV实战——直方图详解

OpenCV实战——直方图详解