使用Python快速卡通化图片

news/2024/10/17 15:30:21/

欢迎关注 “小白玩转Python”,发现更多 “有趣”

引言

PhotoShop中有个功能可以将图片卡通化,让图片变得非常有趣。其实在Python中我们也可以通过OpenCV这个强大的图像处理库来实现这个功能,下面让我们开始吧!

如何将一幅图像卡通化呢?

将图像转换为卡通图像通常需要两个主要步骤: 边缘检测和区域平滑。

边缘检测的主要目的是凸显图像的边缘,因为通常卡通图像都有明确界定的边缘。同时,区域平滑的主要目的是去除不重要的颜色边界,减少图像的噪声或纹理,使图像像素化程度降低。

根据不同的滤波器,可以得到不同的图像卡通化效果。在本文中,将有以下四种不同的过滤器:

1. 铅笔素描滤波器

2. 细节增强滤波器

3. 双边滤波器

4. 铅笔边缘滤波器

接下来,我们将展示如何应用每个过滤器,以及从每个过滤器得到什么样的结果。

铅笔素描滤波器

使用铅笔素描过滤器,您的图像将被转换为素描样式,就像使用铅笔绘制图像一样。以下是使用OpenCV将图像转换为铅笔素描的完整代码。

# Convert the image into grayscale image
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# Blur the image using Gaussian Blur 
gray_blur = cv2.GaussianBlur(gray, (25, 25), 0)# Convert the image into pencil sketch
cartoon = cv2.divide(gray, gray_blur, scale=250.0)

使用OpenCV只需要三行代码就可以将图像转换成铅笔素描式的图片,是不是很神奇。现在我们来逐行地解释一下图像经历了什么。

在第一行中,我们使用OpenCV的cvtColor()函数将图像从彩色转换为灰度。

接下来,我们使用高斯模糊来模糊图像。通过模糊灰度图像,我们可以实现平滑图像,减少图像的噪声。另外,图像模糊是检测图像边缘的必要步骤。

为了模糊图像,可以使用OpenCV中的GaussianBlur()函数。GaussianBlur()函数的内核大小是(25,25)。

因为我们使用了高斯模糊,核中像素值的分布遵循正态分布。内核的数量越大,标准差就会越大,因此,模糊效果就会越强。下面是不同内核大小的模糊结果的例子。

最后一步将原始灰度图像与模糊灰度图像分割。分割图像给我们两个图像的每个像素之间的变化率。模糊效果越强,每个像素相对于其原点的值变化就越大,因此,它使我们的铅笔素描就越清晰。

下面是使用铅笔素描滤波器的结果。

细节增强滤波器

简而言之,细节增强滤波器通过锐化图像,平滑颜色,增强边缘,实现一个卡通效果。下面是用这个滤波器将图像转换成卡通图像的完整代码。

#convert the image into grayscale image
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#Blur the grayscale image with median blur
gray_blur = cv2.medianBlur(gray, 3) #Apply adaptive thresholding to detect edges
edges = cv2.adaptiveThreshold(gray_blur, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 9, 9) #Sharpen the image
color = cv2.detailEnhance(img, sigma_s=5, sigma_r=0.5)#Merge the colors of same images using "edges" as a mask
cartoon = cv2.bitwise_and(color, color, mask=edges)

第一步和之前一样,需要把图像转换成灰度图像。

然后使用OpenCV的medianBlur()函数。中值模糊通过计算与核重叠的像素值的中值来实现,然后用计算出的中值替换中心像素值。当然你可以使用高斯模糊。

接下来,我们需要检测图像的边缘。为此,通过OpenCV的adaptiveThreshold()函数应用自适应阈值。自适应阈值的主要目标是根据内核重叠的像素的平均值,将图像每个区域中的每个像素值转换为全黑或全白。

下面是自适应阈值对模糊图像的可视化效果。

最后,利用自适应阈值的结果作为掩模。然后,根据掩模的值对细节增强的结果进行合并,得到边缘清晰的锐利效果。

下面是使用细节增强滤波器的结果。

双边滤波器

使用双边滤波器的一个最大的优点是我们可以在保留边缘的同时平滑图像和颜色。下面是完整代码。

#Convert image to grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#Apply median blur 
gray = cv2.medianBlur(gray, 3)#Detect edges with adaptive threshold
edges = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 9, 9)#Apply bilateral filter
color = cv2.bilateralFilter(img, 5, 50, 5)#Merge the colors of same image using "edges" as a mask
cartoon = cv2.bitwise_and(color, color, mask=edges)

仔细查看会发现,这些代码与细节增强滤波器十分相似,但这里用的是OpenCV的bilateralFilter()函数来代替detailEnhance()函数。

下面是使用双边滤波器的结果。

铅笔边缘滤波器

铅笔边缘过滤器将创建一个新的图像,只包含有意义的边缘和白色背景。下面是完整的代码。

#Convert the image into grayscale image
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#Blur the grayscale image using median blur
gray = cv2.medianBlur(gray, 25) #Detect edges with Laplacian
edges = cv2.Laplacian(gray, -1, ksize=3)#Invert the edges
edges_inv = 255-edges#Create a pencil edge sketch
dummy, cartoon = cv2.threshold(edges_inv, 150, 255, cv2.THRESH_BINARY)

在这里使用的是拉普拉斯滤波器。拉普拉斯滤波器的作用凸显物体的边缘。

接下来,我们反转拉普拉斯滤波器的结果,使较暗的灰色变得更亮,反之亦然。最后,通过应用OpenCV中的threshold()函数,根据指定的阈值将灰度图像转换为全黑或全白。

下面是铅笔边缘滤镜的结果。

结束语

现在我们已经实现了四种将图片卡通化的方法,是不是觉得很酷!快点实现给你展示给你的朋友看看吧~

·  END  ·

HAPPY LIFE


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

相关文章

python怎么把照片转成卡通_python用OpenCV转卡通照片报错,好像是pyrdown的使用有问题?...

源代码如下:#-*-coding:utf-8-*-importcv2importosdefcartoonise(picture_name):imgInput_FileNamepicture_nameimgOutput_FileName"F:\\K\\M"picture_namenum_down2#缩减像素采样... 源代码如下: # -*- coding: utf-8 -*- import cv2 import …

php 照片变成卡通照片,怎么把照片变成卡通人物 如何把照片变成卡通画 把照片变成卡通人物...

在我们的印象中卡通人物就是一种可爱的象征,卡通也是绝大多数人的最爱,无论是小孩纸,还是骚年们,抑或是大人,都喜欢卡通。那么如果把自己的照片制作成可爱的卡通图片又会是怎样一番效果呢,可爱的东西大家都…

什么软件可以把真人照片卡通化、动漫化?

相信大家平时也看过很多动漫,你是不是觉得动漫人物很可爱,是不是经常把自己代入动漫场景中?许多朋友说,他们想也想看看自己变成动漫卡通人物会是什么样子,并想制作自己的卡通肖像。事实上,这并不难实现。 …

python照片转卡通_Python实现将照片变成卡通图片的方法【基于opencv】

本文实例讲述了Python实现将照片变成卡通图片的方法。分享给大家供大家参考,具体如下: 之前的文章介绍了使用Photoshop将照片变成卡通图片,今次介绍用代码来实现这项任务,可以就此探查各种滤镜的内部机制。 制作环境:W…

逆向思维:卡通照片真人化

之前PaddleGAN的趣味应用如雨后春笋般地出现,非常多的项目都是xxx动漫化。当时就有一个很普通的想法为什么大家都会去搞动漫化,这很可能是因为二次元文化的原因,又或者是动漫化的应用、商业价值。 就突然蹦出一个想法,为什么没人…

Python卡通化照片

您可以通过在Python中实现机器学习算法为照片赋予卡通效果。 如您所知,素描或创建卡通不一定总是需要手动完成。如今,许多应用程序都可以将您的照片变成卡通。但是,如果我告诉您,您可以用几行代码创建自己的效果? 有…

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

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

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

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