2015-11-26 2 views
0

Я хочу обнаружить красные и зеленые объекты с веб-камеры. Я использую эту библиотеку Trackingjs. Я думаю, что в библиотеке он будет отслеживать красное, зеленое и синее значение объекта и определять цвет в соответствии со встроенной библиотекой цветов в своем коде.Обнаружить цвет на основе его RGB

Их встроенные цвета определяются следующим образом:

tracking.ColorTracker.registerColor('purple', function(r, g, b) { 
    var dx = r - 120; 
    var dy = g - 60; 
    var dz = b - 210; 
    if ((b - g) >= 100 && (r - g) >= 60) { 
     return true; 
    } 
    return dx * dx + dy * dy + dz * dz < 3500; 
    }); 

В приведенном выше примере, объекты которых имеют свои blue - green >= 100 и red -green >= 60 будет purple.

Может кто-нибудь объяснить это мне, как это работает. И если я хочу обнаружить красный/красноватый и зеленый/зеленоватый, как мне сделать с той же функцией.

ответ

1

Если вы посмотрите на цвета RGB (120,60,210) именно этот фиолетовый:

enter image description here

Теперь dx измеряет расстояние, которое прошло в цвете от красного компонента в том, что фиолетовый, dy измеряет расстояние, пройденное цветом от зеленого компонента этого фиолетового, и dz измеряет расстояние, пройденное цветом от синего компонента.

Возвращаемое значение в конце вычисляет с использованием 3-D Pythagorus квадрат расстояния, прошедшего в цвете от фиолетового в трехмерном цветовом кубе с черным в одном углу, белым по диагонали и R , G и B по углам. Таким образом, он эффективно определяет «сфера» цвета вокруг фиолетового.

Если вы хотите, чтобы обнаружить красноватые тона, вы хотите что-то вроде

if ((r-g)>50 && (r-b)>50) { return true;} 

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

Если вы хотите, чтобы обнаружить зеленоватые тона, вы хотите что-то вроде

if ((g-r)>50 && (g-b)>50) { return true;} 

который просто говорит, что вы хотите там быть более зеленый, чем красный и более зеленый, чем синий.

+0

Это очень хорошее знание, чтобы знать. Красный работает правильно, но с зеленым. Мой зеленый цвет Я хочу обнаружить от огурца, который темно-зеленый. Когда я попробовал код для зеленого, он обнаруживает больше светло-зеленого цвета, так как он обнаруживает только те части, которые отражают свет на огурце. Есть ли у вас предложения? Мой код в данный момент для зеленого: 'if ((g-r)> = 50 && (g-b)> = 10) { return true; } ' –

+1

В зависимости от того, какую ОС вы используете, вы можете использовать программу« Digital Color Meter »для проверки значений RGB, которые вы пытаетесь обнаружить, а затем разработать формулу, которая ее обнаруживает ... http://innolea.com/ легко обнаружить-rgb-и-html-hex-code-of-colors/2308 Или, может быть, вам просто нужно '&& g <64', чтобы найти только темную зелень. Или, может быть, вам нужно преобразовать в цветовое пространство HSL и искать оттенки около 0,3. –

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