ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Easy_cartoonify 实战:基于 OpenCV 的图片卡通化脚本,自动定位图片并一键切换两种画风

Easy_cartoonify 实战:基于 OpenCV 的图片卡通化脚本,自动定位图片并一键切换两种画风 示例工程【免费下载链接】python-mini-projectsA collection of simple python mini projects to enhance your python skills项目地址https://gitcode.com/gh_mirrors/py/python-mini-projects点击查看免费下载本篇技术指南以 python-mini-projects 仓库中的 Easy_cartoonify 项目 为核心讲解如何用 OpenCV 将普通照片处理成卡通风格图像。你将掌握该脚本的终端交互流程、自动搜索图片与自动切换工作目录的实现原理以及cv2.stylization双风格参数的真实取值与调优方向可以直接复制运行、二次扩展。项目定位为“懒人”设计的 OpenCV 卡通化工具按照项目文档 README.md 的描述Easy_cartoonify 是一个基于 OpenCV 库的图像处理脚本它接收用户输入的一张图片输出卡通风格的图像并通过终端交互界面Terminal Based Basic UI让用户无需关心图片所在的目录即可完成处理。该脚本区别于同类教程脚本的核心意义Significance在于两点自动查找图片脚本会在你指定的目录甚至整个文件系统中自动检索目标图片文件无需你手动输入完整绝对路径自动切换工作目录找到图片后脚本会自动把进程的工作目录切换到图片所在目录省去用户手动cd的麻烦。这两个特性对应源码中的两个关键设计下文会逐一拆解其底层实现。运行环境与依赖安装该脚本只依赖 OpenCVPython 绑定与 Python 标准库环境准备非常轻量pip install opencv-python需要 Python 3 环境脚本使用了pathlib.Pathos与pathlib为 Python 标准库无需额外安装需要图形显示环境Linux 桌面 / Windows / macOS因为最终效果通过cv2.imshow弹出窗口展示。运行方式在projects/Easy_cartoonify/目录下python easy_cartoonify.py终端交互流程三步完成卡通化脚本通过三个连续input()提示构成终端交互 UI见 easy_cartoonify.py 与 L31第 1 步输入图片文件名Please enter the name of the image file that you want to process:输入需与磁盘上的文件名完全一致包含扩展名如photo.jpg因为后续搜索采用精确字符串匹配。第 2 步输入可能包含图片的目录Please enter the directory that may contain the image:如果你知道图片所在目录或其父目录直接输入该目录路径即可快速定位如果你完全不知道图片在哪按源码注释建议直接输入/脚本会从根目录递归遍历整个文件系统查找——功能可用但耗时更长。第 3 步选择卡通风格This script currently has 2 sytles. Please type 1 or 2.输入1或2分别对应两种不同风格的卡通化处理输入其他任意内容则输出Invalid style selection.见 L44-L46。整个交互不涉及任何图形按钮或配置文件属于纯命令行驱动的极简流程。核心实现拆解一find_the_image与os.walk自动搜图自动搜图的核心函数定义在 easy_cartoonify.pydef find_the_image(file_name, directory_name): files_found [] for path, subdirs, files in os.walk(directory_name): for name in files: if(file_name name): file_path os.path.join(path,name) files_found.append(file_path) print(files_found[0]) return files_found[0]实现原理使用os.walk(directory_name)递归遍历指定目录及其所有子目录返回每个层级下的path、subdirs、files三元组对每个文件名做精确相等匹配file_name name命中后通过os.path.join(path, name)拼出完整路径并收集到files_found列表函数返回第一个匹配结果files_found[0]并在返回前打印该路径供用户确认。两点使用注意事项从源码结构推断若目录下存在多个同名文件脚本只取遍历顺序中的第一个不会提示用户选择若指定目录下不存在该文件files_found为空访问files_found[0]会抛出IndexError当前版本未做兜底处理。核心实现拆解二Pathos.chdir自动切换工作目录这是 README 强调的“省时省力”特性对应 easy_cartoonify.pyimage_path Path(find_the_image(image_name, image_directory)) new_working_directory image_path.parent os.chdir(new_working_directory)实现原理将搜到的文件路径包装为pathlib.Path对象通过image_path.parent取出图片文件所在的父目录调用os.chdir()将脚本进程的工作目录切换为该父目录。这样做的好处是脚本内部以及后续可能增加的文件保存功能可以放心使用相对路径不必关心图片原本放在哪里这也是文档中所说“saves the time and energy of the user”的直接体现。核心实现拆解三图片读取与可选预览搜到路径后脚本通过cv2.imread读取彩色图像L26color_image cv2.imread(find_the_image(image_name, image_directory))注意此处第二次调用了find_the_image意味着文件会被再次搜索一遍不影响正确性但存在重复遍历开销可作为优化点。若希望在卡通化前对比原图可取消 L27-L29 的注释cv2.imshow(image_not_processed,color_image) cv2.waitKey() cv2.destroyAllWindows()核心实现拆解四卡通化核心cv2.stylization与双风格卡通化的核心是 OpenCV 的边缘保持滤波函数cv2.stylization()脚本根据用户选择应用两组不同的参数L33-L42风格sigma_ssigma_r代码位置视觉倾向依据参数含义推断风格 11500.25L34更大空间平滑半径画面更柔和、色块更平坦风格 2600.5L39更小的平滑半径与更大的颜色容差保留更多细节与边缘两处调用方式完全一致仅参数不同cartoon_image_style_1 cv2.stylization(color_image, sigma_s150, sigma_r0.25) cartoon_image_style_2 cv2.stylization(color_image, sigma_s60, sigma_r0.5)sigma_s与sigma_r是 OpenCV 官方定义的参数sigma_s空间高斯核标准差取值范围0200控制参与平滑的邻域范围值越大图像越趋向大面积色块sigma_r颜色高斯核标准差取值范围01控制被判定为“相似颜色”的容差值越大边缘保留越少、卡通化“涂抹感”越强。处理完成后脚本用cv2.imshow弹出窗口展示结果cv2.waitKey()等待任意按键cv2.destroyAllWindows()关闭窗口L35-L37。调参建议如何扩展出更多风格从源码结构看两种风格本质上只是同一函数的两组参数组合因此扩展新风格非常容易仿照现有分支增加elif分支并为sigma_s/sigma_r配置新取值即可。可尝试的方向sigma_s200, sigma_r0.2追求最大程度的水彩/动漫平涂效果sigma_s30, sigma_r0.6保留最多原始细节的轻度卡通化也可以将sigma_r逐步取0.10.9对比边缘保留程度。已知限制与项目后续方向文档 README.md 明确说明这是项目的第一个版本目前仅有 2 种卡通风格可选作者计划后续为卡通化过程加入更多深度选项。结合源码还可看到当前版本的若干边界仅展示不保存处理结果仅通过窗口显示未调用cv2.imwrite落盘不校验输入文件不存在、风格输入非法已处理为提示语之外的异常未做捕获重复搜索cv2.imread前会再次执行一次全目录遍历。这些均为后续可优化点不影响脚本当前作为入门级卡通化工具的正常使用。小结Easy_cartoonify 以极简的代码量展示了三个值得学习的 OpenCV Python 实践要点用os.walk实现跨目录自动搜图、用pathlib.Path.parentos.chdir自动切换工作目录、用cv2.stylization的边缘保持滤波实现双参数卡通化风格。配合 项目主页 README 中其他 200 个迷你项目可以把它作为图像处理方向的入门样例继续改造——比如增加文件保存、批量处理或更多风格预设。赞分享示例工程【免费下载链接】python-mini-projectsA collection of simple python mini projects to enhance your python skills项目地址https://gitcode.com/gh_mirrors/py/python-mini-projects点击查看免费下载相关推荐Obsidian高效图片本地化一键实现外部图片自动下载存储Obsidian高效图片本地化一键实现外部图片自动下载存储 还在为Obsidian笔记中那些随时可能失效的外部图片链接而烦恼吗 今天我要分享一个超级实用Cherry Studio 飞书通知脚本实践基于 feishu-notify.ts 的 Webhook 卡片消息自动化指南Cherry Studio 飞书通知脚本实践基于 feishu notify.ts 的 Webhook 卡片消息自动化指南 docs/contrib/feisAI 应用大模型桌面应用本地部署RAGAnt Design Empty 空状态组件内置图片指南用 PRESENTED_IMAGE_SIMPLE 一键切换简洁风格占位图Ant Design Empty 空状态组件内置图片指南用 PRESENTED_IMAGE_SIMPLE 一键切换简洁风格占位图 在 Ant Design 中前端UI组件设计系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表