学习如何使用 Python 将你的照片变成卡通版本

c2defd2de36738ce5a3801809e71a246.jpeg

本文将介绍使用 Python 将普通图像转换为卡通版的各种方法。我们将使用 Python 库和包,例如OpenCVPillowscikit-imagematplotlib

以下是该过程的基本概要:

  1. 导入必要的包。

  2. 使用我们正在使用的三个库之一加载图像(OpenCVPillow scikit-image)。

  3. 将图像转换为灰度。

  4. 获取图像的边缘。

  5. 将图像转换为卡通版本。

  6. 使用matplotlib.pyplotOpenCv显示图像

使用 OpenCV

#import the packages
import cv2
import matplotlib.pyplot as plt

# Load the image using cv2
img = cv2.imread("4.jpg")
img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

#Convert to grayscale and apply median blur to reduce image noise
grayimg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
grayimg = cv2.medianBlur(grayimg, 5)

#Get the edges 
edges = cv2.adaptiveThreshold(grayimg, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 5, 5)

#Convert to a cartoon version
color = cv2.bilateralFilter(img, 9, 250, 250)
cartoon = cv2.bitwise_and(color, color, mask=edges)

#Display original image
plt.figure(figsize=(2,2))
plt.imshow(img)
plt.axis("off")
plt.title("Original Image")
plt.show()

#Display cartoon image
plt.figure(figsize=(2,2))
plt.imshow(cartoon)
plt.axis("off")
plt.title("Cartoon Image")
plt.show()

因为cv2 使用BGR颜色格式和matplotlib 使用RGB颜色格式,我们必须将BGR转换为RGB。

这可以使用以下代码完成:

img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

如果要使用 GUI 窗口显示输出,则cv2不需要转换颜色格式。可以使用以下代码在GUI窗口中查看:

#Display original image
cv2.imshow("Original Image", img)

#Display cartoon image
cv2.imshow("Cartoon", cartoon) 

#To keep the window open until the user closes it we can use 
# the cv2.waitKey method passing 0 as parameter
cv2.waitKey (0)

#Remove the window from screen and memory after exiting the script
cv2.destroyAllWindows()

结果是这样的:

943e3385bc7a0f5d7b5b057ba3bf3c9e.png

使用 skimage

#import the packages
from skimage import io, color
from skimage.filters import sobel
from skimage.segmentation import felzenszwalb

import matplotlib.pyplot as plt

# Load the image
img = io.imread("original.jpg")

# Convert to grayscale
grayimg = color.rgb2gray(img)

# Apply the felzenszwalb segmentation
segments_fz = felzenszwalb(img, scale=100, sigma=0.5, min_size=50)

# Convert to a cartoon version
cartoon = color.label2rgb(segments_fz, img, kind='avg')

#Display original image
plt.figure(figsize=(2,2))
plt.imshow(img)
plt.axis("off")
plt.title("Original Image")
plt.show()

#Display cartoon image
plt.figure(figsize=(2,2))
plt.imshow(cartoon)
plt.axis("off")
plt.title("Cartoon Image")
plt.show()

结果是这样的:

2b431c50ef6aebc59ec917890608aa9c.png

使用 PIL

#Import the packages
import matplotlib.pyplot as plt
from PIL import Image, ImageOps, ImageFilter

# Load the image
img = Image.open("original.jpg")

# Convert to a cartoon version
cartoon = ImageOps.posterize(img, 2)

#Display the original image
plt.figure(figsize=(2,2))
plt.imshow(img)
plt.axis("off")
plt.title("Original Image")
plt.show()

#Display the cartoon image
plt.figure(figsize=(2,2))
plt.imshow(cartoon)
plt.axis("off")
plt.title("Cartoon Image")
plt.show()

结果是这样的:

31c9348b3d58e877dc9f350fcd7acb9a.png

总之,使用 Python 将图像转换为卡通是一项简单而强大的任务。借助OpenCVPillow scikit-image等包的帮助,只需几行代码即可将图像卡通化。你可以尝试使用这些工具并了解如何将你的图片变成令人惊叹的卡通图片。

快乐编码!

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

a18ce810bd52f2af83978d636cdac2dd.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值