OpenCV Цветовая гистограмма концентрации - PullRequest
9 голосов
/ 19 февраля 2012

Я работаю в системе ANPR, использующей OpenCV, и видел в нескольких статьях способ сегментации символов. Идея состоит в том, чтобы сделать график, показывающий концентрацию цвета на изображении.

Как мне это сделать?

enter image description here

Это изображение, которое у меня есть:

enter image description here

Мне нужно определить местоположение черных областей, как показано выше, чтобы идентифицировать каждого из символов.

Я пытался добавлять значения пиксель за пикселем, но я делаю это на Android, и это недопустимо.

Ответы [ 2 ]

7 голосов
/ 16 марта 2012

Хорошо, месяц спустя, но я написал для вас немного кода (на 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 в сценарии), очевидно, что при этом вы потеряете некоторое разрешение (как вы можете видеть в изображение ниже).

На изображении я показываю результаты (график hist) с вашим файлом, используя column_width из 1, 10 и 100. Они работали для меня в 0.11, 0.02 и 0.01 секунд соответственно.

Я тоже написал в PIL , но он работает примерно в 5-10 раз медленнее.

character density histograms

0 голосов
/ 16 января 2014

Проверьте OpenALPR (http://www.openalpr.com). Он выполняет сегментацию символов таким же образом (с использованием гистограмм). Это довольно быстро на настольном компьютере, но я не уверен, насколько быстро это будет на Android.

...