Использование карандашного эскиза OpenCV-Python для получения цветного, а также черно-белого карандашного наброска любого изображения.

Что, если я скажу вам, что вы можете стать художником-скетчером за 10 минут. Ну, я не высмеиваю настоящих скетчей, которые рисуют изображения карандашом и бумагой. Но с помощью обработки изображений вы действительно можете сделать набросок любых фотографий всего несколькими строками кода на Python. Все, что вам нужно, это базовое понимание Python. Итак, приступим к наброску. Вместо ручки и бумаги откройте Jupyter Notebook или Google Colab на своем ноутбуке.

Преобразование изображений в эскизы

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

Техника рисования обычно работает путем размытия краев изображения и удаления деталей изображения до нескольких степеней. Разный алгоритм обработки изображений здесь работает по-разному. В этой статье мы собираемся использовать алгоритм OpenCV-Python PencilSketch() и sylization(). Это довольно просто.

Обычно я пишу и запускаю код в Google Colab.Вы можете получить доступ к полному коду в Google Colab здесь.

Мы пройдем через эти основные шаги:

  1. Импортируйте необходимые библиотеки
  2. Загрузите изображение
  3. Обнаружение краев
  4. Постройте вывод

Шаг 1:

import cv2
import matplotlib.pylab as plt
from google.colab.patches import cv2_imshow
from google.colab import files

Шаг 2:

def read_file(filename):
  image = cv2.imread(filename)
  cv2_imshow(image)
  return image
uploaded = files.upload()
filename = next(iter(uploaded))
image = read_file(filename)

Если вы используете блокнот Jupyter, вам не нужно использовать эти строки кода. Просто добавьте путь к изображению. Но если вы используете это в Google Colab, запустите приведенный выше код и загрузите изображение по вашему выбору.

Шаг 3:

dst_sketch, dst_color_sketch = cv2.pencilSketch(image, sigma_s=50, sigma_r=0.07, shade_factor=0.08)
dst_water_color = cv2.stylization(image, sigma_s=50, sigma_r=0.0825)

На этом этапе алгоритм автоматически определяет края изображений. Но вы можете настроить его. Я использую минимальный функционал алгоритма для хорошего выходного изображения. Вы можете исследовать больше, если хотите.

шаг 4:

plt.figure(figsize=(20,14))
plt.subplot(221), plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)), plt.axis('off'), plt.title('Original Image', size=20)
plt.subplot(222), plt.imshow(dst_sketch, cmap='gray'), plt.axis('off'), plt.title('Pencil-Sketch', size=20)
plt.show()

Запустите эту ячейку и увидите магию. Вы можете настроить значения sigma_s, sigma_r и shade_factor на шаге 3. Я преобразовал одно свое изображение в изображение эскиза, используя указанную выше программу. Взгляни.

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

plt.figure(figsize=(20,14))
plt.subplot(221), plt.imshow(cv2.cvtColor(dst_color_sketch, cv2.COLOR_BGR2RGB)), plt.axis('off'), plt.title('Color-Pencil-Sketch', size=20)
plt.subplot(222), plt.imshow(cv2.cvtColor(dst_water_color, cv2.COLOR_BGR2RGB)), plt.axis('off'), plt.title('Stylized-Color', size=20)
plt.show()

Выход крутой. не так ли?

Что ж, я превратил фотографии нескольких однокурсников из Instagram в наброски. Взгляни. Инстаграм

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