2015-05-19 6 views
0

Я работаю над проектом, в котором я хотел бы получить пользовательскую гистограмму из заданного изображения.Python Opencv Гистограмма цветового диапазона

Скажем, я хочу, чтобы подсчитать количество пикселей трех цветов:

  1. Светло-коричневый.
  2. синий.
  3. Красный.

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

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

Спасибо.

ответ

0

Я нашел очень хороший способ, чтобы решить мою проблему:

  1. LAB colorspace является хорошим цветовом для сравнения цвета.
  2. Разница формулы квадратов.

Пример кода:

red_bgr = (0,0,255) # red pixel 
pixel = (2,2,245) # pixel to compare 
red_lab = cv2.cvtColor(pixel1, cv2.COLOR_BGR2LAB) 
pixel_lab = cv2.cvtColor(pixel1, cv2.COLOR_BGR2LAB) 
deltaE = sqrt(abs(red_lab[0] - pixel_lab[0])**2 + 
       abs(red_lab[1] - pixel_lab[1])**2 + 
       abs(red_lab[2] - pixel_lab[2])**2) 
     ) 

Пиксели с низкой DeltaE являются наиболее перцептивно аналогично сравнению цвета.

Имея это, легко построить гистограмму, основанную на цветах, которые я хочу сосчитать.

1

Это все о вашем БИНСЕ

из here

БИНСА: выше гистограмма показывает количество пикселей для каждого значения пикселя, то есть от 0 до 255. т.е. вам нужно 256 значений, чтобы показать над гистограммой. Но учтите, что, если вам не нужно найти количество пикселей для всех значений пикселей отдельно, а количество пикселей в интервале значений пикселей? скажем, например, вам нужно найти число пикселей, лежащих между 0 и 15, затем от 16 до 31, ..., от 240 до 255. Для представления гистограммы вам понадобятся только 16 значений. И это то, что показано в примере, приведенном в учебных пособиях OpenCV на гистограммах.

пример, что цитата относится к показано в [1]

[1] - http://docs.opencv.org/doc/tutorials/imgproc/histograms/histogram_calculation/histogram_calculation.html#histogram-calculation

Оба этих ссылок стоит читать через, но эффективно, что вы можете сделать, это установить ряд из бункеров для диапазонов, которые вы хотите, скажем, светло-коричневый - 1-15 (я не знаю фактических значений), тогда вы можете установить порог для желаемых цветов.

+0

Спасибо за ваш ответ GPPK, я считаю, что ваши ссылки весьма полезны, но моя проблема кроется в цвете, в оттенках серого легко сказать от 10 до 20 интенсивно Цвет1 от 20 до 30 Цвет 2 и так далее, но как насчет цветов rgb? Я не знаю, как применить порог для заданного цвета. –

Смежные вопросы