OpenCV: Как нарисовать линию с цветами, инвертированными относительно поверхности, на которой она должна быть нарисована? - PullRequest
0 голосов
/ 24 ноября 2010

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

Ответы [ 3 ]

3 голосов
/ 24 ноября 2010

Трюк XOR тривиально отличается.Хотя визуально он не самый отчетливый, хотя бы потому, что он полностью игнорирует работу человеческого глаза.Например, на светло-серых тонах насыщенный красный цвет визуально довольно различим.

Возможно, вы захотите преобразовать цвет в HSV и проверить насыщенность S. Если низкий (оттенки серого), нарисуйте красный пиксель.Если насыщенность высока, оттенок вполне очевиден, и белый или черный пиксель будет выделяться.Используйте черный (V = 0), если исходный пиксель имел высокое V;используйте белый, если исходный пиксель имел низкий V (темный насыщенный цвет)

. Вы можете использовать метод LineIterator, как предлагалось ранее.

(Кстати, у трюка XOR тоже есть довольно плохие случаи.^ 0xFF = 0x80. Это чертовски трудно увидеть)

2 голосов
/ 24 ноября 2010

Используйте LineIterator и XOR значения цвета каждого пикселя вручную.

1 голос
/ 24 ноября 2010

Это от моей головы, и я не разработчик C ++, но это должно быть возможно чтобы нарисовать линию в отдельном изображении, а затем имитировать режим инвертированного наложения ... в основном вам нужно получить «отрицательный» / инвертированный цвет за пикселем, который вы получите, вычтя цвет ниже линии из максимального значения цвета.

Что-то вроде:

uint invert(uint topPixel, uint bottomPixel) {
            return (255 - bottomPixel);
}

Не уверен, как, если цвета от 0 до 255 или от 0,0 до 1,0, но, надеюсь, это иллюстрирует идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...