本文将介绍使用 Python 将普通图像转换为卡通版的各种方法。我们将使用 Python 库和包,例如OpenCV、Pillow、scikit-image和matplotlib。
以下是该过程的基本概要:
导入必要的包。使用我们正在使用的三个库之一加载图像(OpenCV,Pillow 或scikit-image)。将图像转换为灰度。获取图像的边缘。将图像转换为卡通版本。使用matplotlib.pyplot或OpenCv显示图像使用 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()
结果是这样的:
使用 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()
结果是这样的:
使用 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()
结果是这样的:
总之,使用 Python 将图像转换为卡通是一项简单而强大的任务。借助OpenCV、Pillow 和scikit-image等包的帮助,只需几行代码即可将图像卡通化。你可以尝试使用这些工具并了解如何将你的图片变成令人惊叹的卡通图片。
快乐编码!