🥑Python卡通化照片

Python | 卡通

您可以通过在Python中实现机器学习算法为照片赋予卡通效果。

如您所知,素描或创建卡通不一定总是需要手动完成。如今,许多应用程序都可以将您的照片变成卡通。但是,如果我告诉您,您可以用几行代码创建自己的效果?

有一个名为OpenCV的库,它为计算机视觉应用程序提供了通用的基础结构,并优化了机器学习算法。它可用于识别物体,检测并生成高分辨率图像。

在本教程中,我将向您展示如何利用OpenCV在Python中为图像赋予卡通效果。我使用Google Colab编写和运行代码。您可以在此处访问完整代码。

要创建卡通效果,我们需要注意两点:边缘和调色板。这些就是照片和卡通之间的区别。要调整这两个主要组成部分,我们将经历四个主要步骤:

  1. 加载图片

  2. 创建边缘掩膜

  3. 减少调色板

  4. 将边缘掩膜与彩色图像结合

在跳到主要步骤之前,请不要忘记在笔记本中导入所需的库,尤其是cv2和NumPy。

加载图片

第一步是加载图像。定义read_file函数,其中包括cv2_imshow以将我们选择的图像加载到Google Colab中。

def read_file(filename):
  img = cv2.imread(filename)
  cv2_imshow(img)
  return img

调用创建的函数以加载图像。

uploaded = files.upload()
filename = next(iter(uploaded))
img = read_file(filename)

我选择下面的图像将其转换为卡通。

创建边缘掩膜

通常,卡通效果会强调图像边缘的厚度。我们可以使用cv2.adaptiveThreshold()函数检测图像中的边缘。

总体而言,我们可以将egde_mask函数定义为:

def edge_mask(img, line_size, blur_value):
  gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  gray_blur = cv2.medianBlur(gray, blur_value)
  edges = cv2.adaptiveThreshold(gray_blur, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, line_size, blur_value)
  return edges

在该函数中,我们将图像转换为灰度。 然后,我们使用cv2.medianBlur降低了模糊灰度图像的噪声。 模糊值越大,意味着图像中出现的黑噪声越少。 然后,应用adaptiveThreshold函数,并定义边缘的线大小。 较大的线条尺寸表示图像中将强调的较粗的边缘。

定义函数后,调用它并查看结果。

line_size = 7
blur_value = 7
edges = edge_mask(img, line_size, blur_value)
cv2_imshow(edges)

Last updated