Гистограмма Концентрации Цвета OpenCV
Я работаю над системой распознавания автомобильных номеров с помощью 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.