Python卡通化照片

news/2024/10/17 15:24:53/

您可以通过在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)

减少调色板

照片和绘图之间在颜色方面的主要区别在于它们各自中不同颜色的数量。 图纸的颜色比照片少。 因此,我们使用色彩量化来减少照片中的色彩数量。

颜色量化

为了进行颜色量化,我们应用了OpenCV库提供的K-Means聚类算法。为了使下一步变得更容易,我们可以如下定义color_quantization函数。

def color_quantization(img, k):
# Transform the imagedata = np.float32(img).reshape((-1, 3))# Determine criteriacriteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 20, 0.001)# Implementing K-Meansret, label, center = cv2.kmeans(data, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)center = np.uint8(center)result = center[label.flatten()]result = result.reshape(img.shape)return result

我们可以调整k值来确定要应用于图像的颜色数量。

total_color = 9
img = color_quantization(img, total_color)

在这种情况下,我将9用作图像的k值。结果如下所示。

双边过滤器

完成色彩量化后,我们可以使用双边滤波器来减少图像中的噪点。这会给图像带来一些模糊和锐度降低的效果。

blurred = cv2.bilateralFilter(img, d=7, sigmaColor=200,sigmaSpace=200)

您可以根据自己的喜好调整三个参数:

  • d —每个像素邻域的直径。
  • sigmaColor —参数的值越大,表示面积越大的半均等颜色。
  • sigmaSpace –该参数的值越大,表示越远的像素就会相互影响,只要它们的颜色足够接近即可。

结合边缘掩膜和彩色图像

最后一步是将我们先前创建的边缘掩膜与经过颜色处理的图像结合起来。为此,请使用cv2.bitwise_and函数。

cartoon = cv2.bitwise_and(blurred, blurred, mask=edges)

在这里!我们可以在下面看到原始照片的“卡通版”。

详情参阅 - 亚图跨际


http://www.ppmy.cn/news/465099.html

相关文章

python视频处理为卡通风格_使用python代码将照片变成卡通图片

今次介绍用代码来实现这项任务,可以就此探查各种滤镜的内部机制。 制作环境:Windows10,Python2.7,Anaconda 任务描述:将D盘某文件夹中的所有图片使用代码进行卡通化,然后保存到另一文件夹中。 卡通化的关…

酷炫机器人简笔画图片_卡通机器人简笔画图片

近年来,机器人的研究和设计成为许多人关注的焦点,当然。机器人也有卡通形象。你喜欢机器人吗?知道卡通机器人的简笔画是怎样的吗?今天先和学习啦小编一起欣赏这些卡通机器人简笔画图片,希望你会有所收获的。 卡通机器人简笔画图片欣赏 卡通…

用python画卡通图_Python 生成卡通图片

#!/usr/bin/env python # -*- coding:utf-8 -*- import cv2 def cartoonise(picture_name): imgInput_FileName picture_name imgOutput_FileName "cartoon" picture_name num_down 2 #缩减像素采样的数目 num_bilateral 7 #定义双边滤波的数目 img_rgb c…

使用Python+OpenCV将照片变成卡通照片

正如你可能知道的,素描或创建一个卡通并不总是需要手动完成。如今,许多应用程序可以把你的照片变成卡通照片。但是如果我告诉你,你可以用几行代码创造属于自己的效果呢? 有一个名为OpenCV的库,它为计算机视觉应用程序提…

php 照片变成卡通照片,怎么把照片做成q版卡通 照片变q版卡通人物 q版卡通头像制作...

想要把自己的头像变成真人q版卡通漫画,偷偷问了一个漫画家怎么制作的,他说用电脑手绘,得有画画基础才行,小编这下子就打了退堂鼓了,照片制作视频容易,但是自己画画太难了。有什么比较容易方法把照片做成q版…

Pixel2Pixel:卡通照片真人化

Pixel2Pixel:卡通照片真人化 项目链接:Pixel2Pixel:卡通照片真人化 前言: 之前PaddleGAN的趣味应用如雨后春笋般地出现,非常多的项目都是xxx动漫化。当时就有一个很普通的想法为什么大家都会去搞动漫化,这…

ChatGPT或致全球3亿人失业,人工智能时代下教育会发生什么样的变革?

不久前,谷歌教育发布了一份关于未来教育的研究报告。该报告由谷歌公司和 Canvas8合作,对来自世界24个国家的94位教育专家进行了历时长达2年的调研,探讨了未来教育形态、教育在未来的作用、教育公平、全球人才需求、教学方式、学习生态、工作技…

【STM32】软件I2C

【STM32】软件I2C I2C简介 I2C总线是一种串行、半双工的总线,主要用于近距离、低速的芯片之间的通信。I2C总线有两根双向的信号线,一根数据线SDA用于收发数据,一根时钟线SCL用于通信双方时钟的同步。 在一个i2c通讯总线中,可连接…