В этом руководстве я покажу вам, как дать мультипликационный эффект на изображение в 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”