Рубрики
Без рубрики

Как карикатизировать изображение с Python

В этом руководстве я покажу вам, как дать мультипликационный эффект на изображение в Python с OpenCV. ОП … Теги с Python, учебником, Showdev, Computerivery.

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

OPENCV – это библиотека Python Python с открытым исходным кодом, используемая для компьютерного зрения и машинного обучения. Он в основном направлен на компьютерное зрение в реальном времени и обработку изображений. Используется для выполнения различных операций на изображениях, которые преобразуют их с использованием разных методов.

Многие приложения могут превратить ваши фотографии в мультфильмы, но вы можете сделать это самостоятельно с несколькими строками кода Python Code.

Это наше тестовое изображение:

Давайте перейдем к коду.

import numpy as np
import cv2

После этого мы читаем наше изображение:

filename = 'elon.jpeg'

Тогда мы определим нашу ResizeImage :

def resizeImage(image):
    scale_ratio = 0.3
    width = int(image.shape[1] * scale_ratio)
    height = int(image.shape[0] * scale_ratio)
    new_dimensions = (width, height)
    resized = cv2.resize(image, new_dimensions, interpolation = cv2.INTER_AREA)

    return resized

Нам нужно найти контуры:

def findCountours(image):

    contoured_image = image
    gray = cv2.cvtColor(contoured_image, cv2.COLOR_BGR2GRAY) 
    edged = cv2.Canny(gray, 30, 100)
    contours, hierarchy = cv2.findContours(edged, 
    cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
    cv2.drawContours(contoured_image, contours, contourIdx=-1, color=1, thickness=1)
    cv2.imshow('Image after countouring', contoured_image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    return contoured_image

После этого мы делаем квантование цвета:

def ColorQuantization(image, K=4):
    Z = image.reshape((-1, 3)) 

Затем мы конвертируем изображение на Numpy Float32:

    Z = np.float32(Z) 

Также нам нужно определить критерии и применять KMAIANS:

    criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10000, 0.0001)
    compactness, label, center = cv2.kmeans(Z, K, None, criteria, 1, cv2.KMEANS_RANDOM_CENTERS)

Затем мы конвертируем в UINT8 и обратиться к исходному изображению:

   center = np.uint8(center)
   res = center[label.flatten()]
   res2 = res.reshape((image.shape))

   return res2
if __name__ == "__main__":

    image = cv2.imread(filename)
    resized_image = resizeImage(image)
    coloured = ColorQuantization(resized_image)
    contoured = findCountours(coloured)
    final_image = contoured
    save_q = input("Save the image? [y]/[n] ")

    if save_q == "y":

        cv2.imwrite("cartoonized_"+ filename, final_image)
        print("Image saved!")

Это наш конечный результат:

Спасибо вам всем.

Оригинал: “https://dev.to/stokry/how-to-cartoonize-an-image-with-python-1e01”