Рекурсивно выполнять уменьшение эффекта «красных глаз» на изображении в C#

Пример Выполнение эффекта красных глаз на picture в C# исследует пиксели в выбранном прямоугольнике и преобразует любой пиксель, который является более красным, чем зеленый или синий, в оттенки серого. Это устраняет эффект «красных глаз» в области, но также преобразует любые другие красные пиксели в оттенки серого. На картинке лица в этом примере много розоватой кожи. Розовый в основном светлый оттенок красного, поэтому программа преобразует розовую кожу в оттенки серого, если она находится в выбранном прямоугольнике.

В этой программе используется другой подход к выбору пикселей для преобразования. Когда вы нажимаете на пиксель, выполняется следующий код.

Этот код в основном просто вызывает следующий рекурсивный метод RemoveRedEyeAtPoint, передавая ему точку, которую вы нажали.

Этот метод вызывает себя рекурсивно, поэтому он сначала проверяет, что его глубина рекурсии не слишком глубока. Если он этого не сделал, и вы нажали на большую красную область на изображении, метод будет называть себя рекурсивно, пока не заполнит стек программы и не разбился. Этот тест просто устанавливает верхнюю границу того, сколько раз метод будет рекурсивно. (Если вам действительно нужно преобразовать огромную красную область в оттенки серого, просто щелкните по ней несколько раз.)

Далее код получает цвет своего целевого пикселя. Если этот цвет не является главным образом красным, метод возвращается. В этой версии я добавил небольшое смещение, поэтому красный компонент должен быть как минимум на 10 больше, чем зеленые компоненты синего цвета. Это не позволяет методу преобразовать пиксели, которые в основном серые, но имеют бесконечно красное, чем зеленое или синее.

Если код делает это так далеко, он преобразует целевой пиксель в оттенки серого.

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

Источник: http://csharphelper.com/blog/2015/07/recursively-perform-red-eye-reduction-on-a-picture-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *