深入了解Python和OpenCV:图像的卡通风格化 您所在的位置:网站首页 动漫卡通照片可爱和霸气 深入了解Python和OpenCV:图像的卡通风格化

深入了解Python和OpenCV:图像的卡通风格化

2024-06-24 07:31| 来源: 网络整理| 查看: 265

前言

当今数字时代,图像处理和美化已经变得非常普遍。从社交媒体到个人博客,人们都渴望分享独特且引人注目的图片。本文将介绍如何使用Python编程语言和OpenCV库创建令人印象深刻的卡通风格图像。卡通风格的图像具有艺术性和创意,它们可以用于图像编辑、创意表达以及增加娱乐价值。

文章目录 前言1. 准备工作2. 读取和显示图像3. 创建边缘掩膜4. 颜色量化5. 图像处理和效果增强6. 完整代码 总结

1. 准备工作

在开始之前,您需要安装以下必要的库:

OpenCV (cv2)NumPy

如果您还没有安装这些库,可以使用pip进行安装。

pip install opencv-python numpy 2. 读取和显示图像

首先,我们将介绍如何使用OpenCV读取图像文件并在窗口中显示它们。这是我们处理图像的第一步。

# 读取文件 def read_file(filename: str) -> np.ndarray: try: img = cv2.imread(filename) if img is None: raise ValueError("Invalid file path or file format.") return img except: raise ValueError("Invalid file path or file format.") # 显示图片 def display_image(img: np.ndarray, window_name: str) -> None: cv2.imshow(window_name, img) cv2.waitKey()

在这个步骤中,我们定义了一个名为read_file的函数,它接受一个文件名作为参数,并返回一个NumPy数组表示的图像。如果文件路径无效或图像格式不受支持,函数将引发异常。 我们定义了一个名为display_image的函数,它接受两个参数:要显示的图像和窗口的名称。函数将图像显示在指定的窗口中,并等待用户按下任意键后关闭窗口。这个简单的步骤允许我们在进行后续处理之前,查看原始照片的外观。

3. 创建边缘掩膜

接下来,我们将图像转化为卡通风格的第一步是创建边缘掩膜。我们将使用边缘检测技术来实现这一目标。

# 边缘掩膜 def edge_mask(image: np.ndarray, line_size: int, blur_value: int) -> np.ndarray: if not isinstance(line_size, int) or not isinstance(blur_value, int) or line_size w: h, w = int(720 * h / w), 720 else: h, w = 720, int(720 * w / h) image = cv2.resize(image, (w, h), interpolation=cv2.INTER_AREA) h, w = (h // 8) * 8, (w // 8) * 8 image = image[:h, :w, :] return image # 图像处理和效果增强 def cartoonize(load_folder, save_folder): name_list = os.listdir(load_folder) for name in name_list: try: load_path = os.path.join(load_folder, name) save_path = os.path.join(save_folder, name) if not save_path.endswith('.jpg'): raise ValueError("Invalid file format. Must be a '.jpg' file.") image = cv2.imread(load_path) image = resize_crop(image) display_image(image, "Image") # 设置边缘掩膜参数并应用 line_size = 7 blur_value = 7 edges = edge_mask(image, line_size, blur_value) display_image(edges, "Edges") # 执行颜色量化 num_colors = 9 processed_image = color_quantization(image, num_colors) display_image(processed_image, "Processed_image") # 应用双边滤波 blurred = cv2.bilateralFilter(processed_image, d=9, sigmaColor=200, sigmaSpace=200) display_image(blurred, "Blurred") # 应用掩膜 cartoonized_image = cv2.bitwise_and(blurred, blurred, mask=edges) display_image(cartoonized_image, "Cartoonized Image") cv2.imwrite(save_path, cartoonized_image) except: print('cartoonize {} failed'.format(load_path))

在这个步骤中,我们首先调整图像的大小和裁剪,以确保它符合处理的要求。然后,我们依次应用边缘掩膜、颜色量化、双边滤波和最后的掩膜应用,将图像转换成卡通画风。

这是整个卡通化过程的关键部分,通过这些步骤,您可以将任何普通照片转换成具有卡通风格的艺术品。在接下来的文章中,我们将展示如何使用这些代码来卡通化您自己的照片。

6. 完整代码 # -*- coding = utf-8 -*- """ # @Time : 2023/9/22 20:18 # @Author : FriK_log_ff 374591069 # @File : newmyway.py # @Software: PyCharm # @Function: 请输入项目功能 """ import cv2 import numpy as np import os # 读取文件 def read_file(filename: str) -> np.ndarray: try: img = cv2.imread(filename) if img is None: raise ValueError("Invalid file path or file format.") return img except: raise ValueError("Invalid file path or file format.") # 显示图片 def display_image(img: np.ndarray, window_name: str) -> None: cv2.imshow(window_name, img) cv2.waitKey() # 边缘掩膜 def edge_mask(image: np.ndarray, line_size: int, blur_value: int) -> np.ndarray: if not isinstance(line_size, int) or not isinstance(blur_value, int) or line_size w: h, w = int(720 * h / w), 720 else: h, w = 720, int(720 * w / h) image = cv2.resize(image, (w, h), interpolation=cv2.INTER_AREA) h, w = (h // 8) * 8, (w // 8) * 8 image = image[:h, :w, :] return image # 上传文件 def cartoonize(load_folder, save_folder): name_list = os.listdir(load_folder) for name in name_list: try: load_path = os.path.join(load_folder, name) save_path = os.path.join(save_folder, name) if not save_path.endswith('.jpg'): raise ValueError("Invalid file format. Must be a '.jpg' file.") image = cv2.imread(load_path) image = resize_crop(image) display_image(image, "Image") # 设置边缘掩膜参数并应用 line_size = 7 blur_value = 7 edges = edge_mask(image, line_size, blur_value) display_image(edges, "Edges") # 执行颜色量化 num_colors = 9 processed_image = color_quantization(image, num_colors) display_image(processed_image, "Processed_image") # 应用双边滤波 blurred = cv2.bilateralFilter(processed_image, d=9, sigmaColor=200, sigmaSpace=200) display_image(blurred, "Blurred") # 应用掩膜 cartoonized_image = cv2.bitwise_and(blurred, blurred, mask=edges) display_image(cartoonized_image, "Cartoonized Image") cv2.imwrite(save_path, cartoonized_image) except: print('cartoonize {} failed'.format(load_path)) if __name__ == '__main__': load_folder = 'test_images' save_folder = 'cartoonized_images' if not os.path.exists(save_folder): os.mkdir(save_folder) cartoonize(load_folder, save_folder) 总结

在本文中,我们探讨了如何使用Python和OpenCV库创建卡通风格的图像。通过一系列图像处理步骤,我们将普通照片转化为有趣和具有创意的卡通风格图像。这个过程涵盖了图像读取、边缘检测、颜色量化、图像处理和效果增强等关键步骤。

卡通风格图像的制作涉及多个步骤,但通过掌握这些技巧,您可以自由发挥创造力,为照片增添新的趣味性。以下是本文中使用的一些关键技术的简要回顾:

图像读取和显示: 我们使用OpenCV库来读取图像文件并在窗口中显示它们。这是开始图像处理的第一步。

边缘掩膜: 为了创建卡通风格,我们使用了边缘检测技术,将图像中的边缘突出显示。

颜色量化: 卡通图像通常包含较少的颜色。我们使用K-Means聚类来减少图像中的颜色数量,从而实现卡通风格的色彩。

图像处理和效果增强: 我们应用了一些图像处理技术,例如双边滤波,以增强最终的卡通效果图像。

在完成所有处理步骤后,我们得到了有趣和独特的卡通风格图像。这个过程可以批量处理图像,使您能够轻松创建多个卡通化的照片。

希望本文对您有所帮助,能够启发您探索更多有趣的图像处理项目。 创造自己独特的卡通风格图像,让您的照片在社交媒体和网络上脱颖而出。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有