Как изменить цвет пикселя python

Обновлено: 04.07.2024

Мы вернулись с другой статьей о работе с изображениями и в этом, вы узнаете шаги для настройки пикселей с модулем OpenCV в Python. Если вы просто начинаете, убедитесь, что вы узнаете, как загружать изображения в Python, который покрыт частью 1 этой серии.

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

Это статья, которая простирается от предыдущей вступительной статьи и, следовательно, будет пропущена процесс установки модуля OpenCV.

Получение и настройки пикселей на изображении

Большая часть обработки изображений имеет отношение к обработка Отказ

Таким образом, мы будем погружать на свои руки в этот аспект, и мы будем работать с изображением, и изменить свойства изображения.

Это означает, что мы будем изменять данные на изображении, манипулируя пикселями.

Простые слова, изменяя их.

Реализация курса с Opencv

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

Это поможет в решении проблемы попыток найти изображения для работы.

Несколько мест, которые вы можете найти наборов данных изображения,

Получение изображений и настройки пикселей в Python Opencv

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

1. Импортируйте необходимые модули

Давайте импортируем как модули,

2. Чтение изображения

Далее мы создадим объект, который принимает в параметре аргумента, а затем назначает путь к args Отказ

Выходя вперед, мы позволяем переменную изображения прочитать изображение от args используя cv2.imread () функция.

3. Назначение размеров в переменных

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

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

4. Окрашивая отдельные пиксели

Давайте теперь присваиваем цвет на определенный пиксель. Мы будем присвоить красным цветом пикселем в месте (0, 0).

Трудно заметить с большим изображением, и вам действительно придется внимательно присмотреть, чтобы заметить его.

Итак, давайте вместо этого сделаем намного более видимым для глаз!

Мы осмотрим на полную четверть изображения с зеленым цветом! Сначала мы сначаем просмотрите первый квартал через размеры, прежде чем окрашивать его.

Три других квартала также были предоставлены, если вы хотите проверить его на любом из них 😉

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

Наконец, вы будете встречаться с обновленным изображением с окрашенным первым кварталом!

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

Заключение

Теперь вы знаете, как работать с данными, присутствующими в изображениях.

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

Хотите подкрадываться на работу с концепциями в будущем? Вот несколько статей о работе с обработкой изображений!

Работа с OpenCV и распознаванием лица и реализация Java Android и Camerax Opencv!

Numpy advanced (1) - изменить указанный цвет на картинке

Предъявлять требования

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

23.jpg

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

Принцип объяснения

Прежде чем менять цвет, вы должны понять, что такое кодирование изображений. Обычно мы используем следующее кодирование. RGB Формат, R、G、B Трехканальная группа

 - rgb cmyk-129315207.jpg

Диапазон значений каждого канала составляет 0-255 Между этими тремя каналами стоит любая комбинация для образования любого цвета в цветовой палитре, когда R、G、B Он черный, когда он [0,0,0], [255,255,255] Белый цвет, принцип изображения состоит в том, чтобы расположить разные значения пикселей в определенном порядке

Другими словамиСуть изменения цвета изображения заключается в изменении указанного значения пигмента.

Позвольте мне поговорить об этом здесь подробнее, обычно мы сталкиваемся с некоторыми прозрачными изображениями, прозрачные изображения относительно нормальны RGB Изображение добавляет дополнительный канал, и диапазон значений дополнительного канала также находится в 0-255 Используется между ними для управления степенью прозрачности изображения; чем больше значение, тем более непрозрачным; этот режим вызывается в библиотеке PIL. RGBA формат

Кодекс практики

Давайте введем часть кода ниже. Здесь сначала используйте библиотеку изображений, чтобы прочитать изображение (здесь я использую PIL), и преобразуйте формат изображения в тип массива, чтобы облегчить изменение значения пикселя позже.

По результатам мы можем понять, что фоновые пиксели изображения [255 255 255] , После того, как мы узнаем значение фонового пикселя, следующим шагом будет замена значения пикселя, которое мы хотим заменить.

Snipaste_2020-03-21_23-20-30.jpg

В процессе замены сначала используйте наиболее традиционный и эффективный рекурсивный метод, используя два for Выполните цикл, чтобы оценить значение пикселя, если значение пикселя [255 255 255] Просто замените его, иначе не изменяйте, используйте здесь [0 0 255] Синий вместо фона,

Также можно использовать циклы for для изменения пикселя за пикселем, но, поскольку изменение происходит пиксель за пикселем, возникнет проблема.кропотливый , Чем больше разрешение изображения, тем очевиднее этот недостаток, потому что это модификация массива, поэтому мы можем использовать Numpy Для работы;

С помощью Numpy Сначала разделите три канала, а затем добавьте их, чтобы получить новый массив. Добавьте трехканальные значения R, G и B, которые необходимо изменить, чтобы получить собственное значение. Используйте условный фильтр между логическим значением и собственным значением массива Numpy Обновите значения в массиве, полный код выглядит следующим образом:

Наконец, мы можем взглянуть на результат, потому что на найденных нами изображениях не все пиксели вокруг головы женщины [255 255 255] (чистый белый) , Таким образом, на замененном изображении будут появляться изъяны, но общий эффект все еще относительно хороший

Snipaste_2020-03-21_23-50-00.jpg

Причина использования второго метода связана с высокопроизводительными вычислениями операций с массивом Numpy. Вот список времени, затраченного двумя методами во время выполнения. Метод канала Numpy составляет менее 0,08 с, а метод итерации - до 1,3 с. Производительность канального метода лучше:

Я очень новичок в программировании, и я узнаю больше об обработке изображений с использованием PIL.

У меня есть определенная задача, которая требует, чтобы я изменил цвет каждого конкретного пикселя другим цветом. Поскольку требуется изменить несколько пикселей, я создал цикл for для доступа к каждому пикселю. Скрипт «работает» по крайней мере, однако в результате получается черный экран с цветом (0, 0, 0) в каждом пикселе.

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

Однако, на всю жизнь, я не понимаю, почему мой результат получается с единственным (0, 0, 0) цветом.

Я пытался найти ответ в Интернете и в друзьях, но не смог найти решение.

Если кто-то знает, что я делаю не так, любая обратная связь будет высоко оценена. Заранее спасибо.

1 ответ

Проблема в том, что ваше изображение, как вы сказали, оттенки серого , поэтому в этой строке:

Ни один пиксель никогда не будет равен триплету RGB (255,255,255) , потому что белые пиксели будут просто долей серого 255 , а не триплетом RGB.

Это прекрасно работает, если вы измените ваш цикл на:

Вот результат растяжения контраста:

enter image description here

Возможно, вы захотите выполнить преобразование, используя «Таблица поиска» или LUT, поскольку большое количество операторов if может быть громоздким. По сути, каждый пиксель в изображении заменяется новым, найденным путем поиска его текущего индекса в таблице. Я тоже делаю это с numpy :

Результат - после растяжения контраста:

enter image description here

Возможно, я немного многословен выше, так что если вам нравится более краткий код:


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

Подготовка
Оттенки серого

Для получения этого преобразования необходимо «усреднить» каждый пиксел.


Сепия



Чтобы получить сепию, нужно посчитать среднее значение и взять какой — нибудь коэффициент.
middle = (R + G + B) / 3
Первое значение пиксела ( R ) = middle + 2 * k
Второе значение пиксела ( G ) = middle + k
Третье значение пиксела ( B ) = middle



depth = 30

Негатив

Теперь научимся получать негатив.
Это очень просто, достаточно лишь каждое значение пиксела вычесть из 255.


Добавление шумов

Вот тут совсем всё просто.
Мы будем всегда добавлять к пикселу какое — нибудь рандомное значение. Чем больше разброс этих значений, тем больше шумов.



factor = 70

Яркость

Для регулирования яркости к каждому пикселу мы будем добавлять определенное значение. Если оно > 0, то картинка становится ярче, иначе темнее.


factor = 100

factor = -100

Чёрно — белое изображение

Теперь все пикселы надо разбить на 2 группы: черные и белые.
Для проверки принадлежности к определенной группе мы будем смотреть к чему ближе значение пиксела: к белому цвету или к чёрному.



factor = 100

Читайте также: