Использование карандашного эскиза OpenCV-Python для получения цветного, а также черно-белого карандашного наброска любого изображения.
Что, если я скажу вам, что вы можете стать художником-скетчером за 10 минут. Ну, я не высмеиваю настоящих скетчей, которые рисуют изображения карандашом и бумагой. Но с помощью обработки изображений вы действительно можете сделать набросок любых фотографий всего несколькими строками кода на Python. Все, что вам нужно, это базовое понимание Python. Итак, приступим к наброску. Вместо ручки и бумаги откройте Jupyter Notebook или Google Colab на своем ноутбуке.
Преобразование изображений в эскизы
Что ж, преобразование изображений в эскизы зависит от того, насколько точно вы определяете края изображений. Это полностью зависит от вас, насколько хорошо вы определяете края изображения. Уже доступно несколько алгоритмов, которые помогут вам в обнаружении краев.
Техника рисования обычно работает путем размытия краев изображения и удаления деталей изображения до нескольких степеней. Разный алгоритм обработки изображений здесь работает по-разному. В этой статье мы собираемся использовать алгоритм OpenCV-Python PencilSketch() и sylization(). Это довольно просто.
Обычно я пишу и запускаю код в Google Colab.Вы можете получить доступ к полному коду в Google Colab здесь.
Мы пройдем через эти основные шаги:
- Импортируйте необходимые библиотеки
- Загрузите изображение
- Обнаружение краев
- Постройте вывод
Шаг 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 в наброски. Взгляни. Инстаграм
Спасибо за чтение!!, и если эта статья была вам полезна, то хлопайте до крови.