Гистограмма концентрации цвета OpenCV
Я работаю над системой ANPR с использованием OpenCV и видел в нескольких статьях способ сегментации символов. Идея состоит в том, чтобы сделать график, показывающий концентрацию цвета на изображении.
Как мне это сделать?
Это изображение, которое у меня есть:
Мне нужно определить местоположение черных областей, как показано выше, чтобы идентифицировать каждого из персонажей.
Я попытался добавить значения пиксель за пикселем, но я делаю это на Android, и время, которое требуется, недопустимо.
2 ответа
Хорошо, месяц спустя, но я написал для вас немного кода (на 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 раз медленнее.
Проверьте OpenALPR ( http://www.openalpr.com/). Он выполняет сегментацию символов таким же образом (используя гистограммы). Это довольно быстро на рабочем столе, но я не уверен, насколько быстро это будет на Android.