---
description: Python | 卡通
---

# Python卡通化照片

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

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

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

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

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

1. 加载图片
2. 创建边缘掩膜
3. 减少调色板
4. 将边缘掩膜与彩色图像结合

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

### 加载图片

第一步是加载图像。定义read\_file函数，其中包括cv2\_imshow以将我们选择的图像加载到Google Colab中。

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

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

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

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

### 创建边缘掩膜

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

总体而言，我们可以将egde\_mask函数定义为：

```python
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函数，并定义边缘的线大小。 较大的线条尺寸表示图像中将强调的较粗的边缘。

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

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

{% content-ref url="../zhi-dian-mi-jin-brief" %}
[zhi-dian-mi-jin-brief](../zhi-dian-mi-jin-brief)
{% endcontent-ref %}
