Создание красивого эскиза требует много времени и усилий. К счастью, программирование изменилось, и теперь вы можете легко преобразовывать изображения и создавать красивые дизайны. Одна впечатляющая техника, которую вы можете применить, — это преобразовать изображение в цифровой эскиз.
Хотя механический набросок не будет выглядеть точно так же, как ваш собственный карандашный рисунок, с результатом все же стоит поэкспериментировать. Узнайте, как запрограммировать такое приложение, используя модуль OpenCV на очень удобном языке Python.
Модуль OpenCV
OpenCV — это разработанная и поддерживаемая Intel библиотека с открытым исходным кодом для методов компьютерного зрения, используемых для обработки изображений и компьютерного зрения. Это позволяет пользователям легко создавать оптимизированные приложения, взаимодействовать с изображениями и видео в режиме реального времени и выбирать идеальный алгоритм для своих нужд.
Некоторые из популярных приложений OpenCV включает обнаружение лиц, автоматическое отслеживание лица в кинематографе, фильтры социальных сетей, распознавание номерного знака автомобиляи видеонаблюдения. Чтобы использовать модуль OpenCV в Python, откройте терминал и введите следующую команду:
pip установить opencv-python
Как преобразовать любое изображение в эскиз с помощью Python
Чтобы преобразовать ваше любимое изображение в цифровой набросок, сначала поместите его в ту же папку, что и новая программа Python, для удобства ссылок. Затем начните создавать свою программу, используя следующие шаги.
Этот пример кода доступен в Репозиторий GitHub и вы можете использовать его бесплатно по лицензии MIT.
Первый шаг — импортировать модуль OpenCV в вашу среду. Как только OpenCV станет доступен, вы сможете использовать его функциональные возможности для выполнения различных задач. Передайте путь к файлу изображения в просмотреть() функция загрузки. Сохраните изображение в переменной, называемой изображение1 здесь - для дальнейшего использования.
Сохраните заголовок окна в переменной с именем имя_окна. Это будет полезно, когда вы решите отображать изображение с помощью показать() функция. Эта функция требует два параметра: заголовок и изображение, которое вы хотите отобразить.
Импортировать cv2
изображение1 = cv2.imread('изображение.jpg')
имя_окна = «Реальное изображение»
cv2.imshow(имя_окна, изображение1)
Когда у вас есть желаемое изображение, вам нужно выполнить пять операций, чтобы преобразовать его в эскиз. Сначала преобразуйте цветное изображение в оттенки серого. Вы можете сделать это с помощью cvtColor() функция. Эта функция принимает изображение, цвета которого вы хотите изменить, и код преобразования, такой как COLOR_BGR2GRAY.
grey_img = cv2.cvtColor (изображение1, cv2.COLOR_BGR2GRAY)
Получив изображение в градациях серого, инвертируйте его цвета. На этом этапе вам нужно понять, как компьютер формирует изображение. Изображение состоит из множества крошечных пикселей с различной интенсивностью. В цветном изображении каждый пиксель содержит красный, зеленый и синий компоненты, интенсивность каждого из которых варьируется от 0 до 255.
В изображении в градациях серого есть только оттенки серого, поэтому интенсивность пикселя варьируется от 0 до 1. Чтобы инвертировать интенсивность пикселей этого изображения, передайте изображение в градациях серого в побитовое_не() функция.
Как следует из названия, эта функция инвертирует значение каждого пикселя в его дополнительный эквивалент. Все пиксели больше 0 устанавливаются равными 0, а все пиксели равными 0 устанавливаются равными 255.
инвертировать = cv2.bitwise_not (grey_img)
После инвертирования интенсивности пикселей вы можете сгладить изображение с помощью Gaussian Blur. В процессе размытия по Гауссу используется фильтр Гаусса. Фильтр Гаусса — это фильтр нижних частот, который пропускает только низкие частоты, удаляя высокочастотную составляющую сигнала или изображения.
OpenCV Размытие по Гауссу() функция принимает четыре параметра. Это матричный объект, который действует как исходное изображение, ksize (размер ядра) и sigmaX (стандартное отклонение ядра по Гауссу).
Предположим, у вас в руках физическая фотография. Если вы хотите размыть его, вы можете нанести на него кусочки воска или пергаментной бумаги. Вы можете представить себе ядро как этот прозрачный кусочек бумаги. В цифре это происходит немного по-другому. Чтобы размыть, повысить резкость и применить другие эффекты к цифровому изображению, вы умножаете матрицу на интенсивность пикселей изображения.
ksize всегда является положительным нечетным числом. По мере увеличения размера ядра размытие увеличивается. Чтобы понять sigmaX, предположим, что вы наносите воск на бумагу. Когда вы наносите воск, бумага становится равномерно прозрачной. Точно так же вы должны держать значения ядра близкими к определенной точке (среднему значению). Значение sigmaX определяет разницу между средним значением и другими значениями пикселей изображения.
Передайте перевернутое изображение, размер ядра (21, 21) и стандартное отклонение 0 в функцию Gaussian Blur:
размытие = cv2.GaussianBlur (инвертировать, (21, 21), 0)
Снова передайте размытое изображение в функцию bitwise_not(), чтобы инвертировать его:
invertedblur = cv2.bitwise_not (размытие)
Наконец, используйте разделять() функции и для выполнения поэлементного разделения массива изображений в градациях серого и массива изображений инвертированного размытия с масштабом 256.
эскиз = cv2.divide (grey_img, invertedblur, scale=256.0)
По сути, функция выполняет следующую операцию:
дефразделять(grey_img, b, инвертированное размытие =256.0):
возвращаться (grey_img * масштаб) / инвертированное размытие
Сохраните результат в переменной с именем sketch. Чтобы сохранить окончательное изображение, передайте имя выходного файла и эскизное изображение в записать() функция. Чтобы убедиться в этом, вы можете использовать функцию imread(), чтобы загрузить сохраненное изображение скетча, задать заголовок окна и отобразить его с помощью функции imshow().
Использовать ключ ожидания () функцию, передав 0 для отображения исходного окна изображения и окна сгенерированного эскиза, пока вы не нажмете любую клавишу.
cv2.imwrite("эскиз.jpeg", набросок)
изображение = cv2.imread("эскиз.jpeg")
имя_окна =«Эскиз изображения»
cv2.imshow (имя_окна, изображение)
cv2.waitKey(0)
Соберите весь код вместе, и ваша программа будет готова.
Пример вывода преобразования изображения в эскиз с помощью этой программы Python
Вы можете выбрать красивое пейзажное изображение и запустить его в программе, чтобы создать этот потрясающий цифровой эскиз.
На портретном изображении программа создает следующий цифровой эскиз.
Вы можете поэкспериментировать с параметрами функции по своему вкусу, чтобы создать желаемый цифровой эскиз.
Обработка изображений и компьютерное зрение
Обработка изображений и компьютерное зрение — две тесно связанные области технологий. Оба они включают изменение цифровых изображений для получения желаемых результатов. Обработка изображений фокусируется на улучшении изображения, в то время как компьютерное зрение ищет закономерности и объекты в изображении, чтобы понять его.
Scikit-image — еще одна библиотека Python, предоставляющая широкий спектр функций обработки изображений. Он имеет несколько предварительно скомпилированных модулей, фильтров, слоев, преобразований и многого другого. Если вы ищете модуль для моделей глубокого обучения, таких как CNN и RNN, вы можете изучить Torchvision.