<MyRusakov.ru />

Программирование на C++ с Нуля до Гуру

Программирование на C++ с Нуля до Гуру

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

Для закрепления материала из уроков к ним идёт множество упражнений.

Дополнительно к курсу идёт вспомогательная система, которая не даст Вам забросить начатое на полпути.

Также вместе с курсов Вы получаете Бонус "Программирование на C++ в Unreal Engine", в котором Вы научитесь создавать игры на C++ с использованием этого движка.

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Зачем Вы изучаете программирование/создание сайтов?

Обработка изображений с помощью numpy

Обработка изображений с помощью numpy

Модуль numpy и python позволяют создавать массивы произвольной длины и заполнять их некоторыми значениями. Так как изображение можно представить в виде массива, то мы можем отобразить созданный нами массив в виде изображения RGB, т.е. цветное изображение. Изображения RGB обычно хранятся в виде 3-мерных массивов 8-битных целых чисел без знака. Форма массива такова:

height x width x 3.

Вот как мы создаем массив для представления изображения шириной 5 пикселей и высотой 4 пикселя:


import numpy as np

width = 5
height = 4

arr = np.zeros([height, width, 3], dtype=np.uint8)

Обратите внимание, что первое измерение-это высота, а второе измерение-ширина. Это связано с тем, что данные упорядочены по строкам, затем каждая строка упорядочена по пикселям, и, наконец, каждый пиксель содержит 3 байтовых значения для RGB. Каждый цвет представлен байтом без знака (numpy dtype uint8).

Теперь давайте заполним массив оранжевыми пикселями (красный=255, зеленый=128, синий=0). Для этого мы используем срезы, три значения передаются по всем строкам и столбцам массива:

arr[:,:] = [255, 128, 0]

Сохранение изображения RGB с помощью PIL

Теперь мы можем использовать метод fromarray для создания изображения PIL из массива numpy и сохранения его в виде файла PNG:


from PIL import Image

img = Image.fromarray(array)
img.save('imrgb.png')

Изображение:


Изображение

Создание изображений RGBA

Изображение RGBA имеет 4 канала (в отличие от изображения RGB, которое имеет только 3). Четвертый канал-это альфа-канал. Значение альфа 255 сделает пиксель полностью непрозрачным, значение 0 сделает его полностью прозрачным, значения между ними сделают пиксель частично прозрачным.

В приведенном ниже коде мы создаем изображение RGBA, изначально устанавливая те же синие и оранжевые области, что и раньше, со значением альфа 255. Затем мы зацикливаемся на изображении, изменяя альфа-значение каждого пикселя так, чтобы оно было равно его координате x. Это означает, что пиксели в левой части изображения будут прозрачными, а пиксели справа будут почти полностью непрозрачными. Прозрачность плавно меняется слева направо.:


import numpy as np
from PIL import Image

array = np.zeros([100, 200, 4], dtype=np.uint8)
array[:,:100] = [255, 128, 0, 255] # оранжевый цвет для левого края 
array[:,100:] = [0, 0, 255, 255]   # голубой цвет для правого 

# установление прозрачности в зависимости от положения x
for x in range(200):
    for y in range(100):
        array[y, x, 3] = x

img = Image.fromarray(array)

img.save('imrgba.png')

Изображение:


Изображение

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

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.