python实现图片转换成素描和漫画格式


Posted in Python onAugust 19, 2020

本文实例为大家分享了python实现图片转换成素描和漫画格式的具体代码,供大家参考,具体内容如下

原图

python实现图片转换成素描和漫画格式

图片转换后的成果

python实现图片转换成素描和漫画格式

源码

# -*- coding: utf-8 -*-

import cv2

from PIL import Image, ImageOps, ImageFilter


# 转换成漫画风格
def toCarttonStyle(picturePath):
 # 设置输入输出路径和文件名称
 imgInput_FileName = picturePath
 imgOutput_FileName = picturePath.split(".")[0] + '_cartoon.' + picturePath.split(".")[1]

 # 属性设置
 num_down = 2 # 缩减像素采样的数目
 num_bilateral = 7 # 定义双边滤波的数目

 # 读取图片
 img_rgb = cv2.imread(imgInput_FileName)

 # 用高斯金字塔降低取样
 img_color = img_rgb
 for _ in range(num_down):
 img_color = cv2.pyrDown(img_color)

 # 重复使用小的双边滤波代替一个大的滤波
 for _ in range(num_bilateral):
 img_color = cv2.bilateralFilter(img_color, d=9, sigmaColor=9, sigmaSpace=7)

 # 升采样图片到原始大小
 for _ in range(num_down):
 img_color = cv2.pyrUp(img_color)

 # 转换为灰度并且使其产生中等的模糊
 img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2GRAY)
 img_blur = cv2.medianBlur(img_gray, 7)

 # 检测到边缘并且增强其效果
 img_edge = cv2.adaptiveThreshold(img_blur, 255,
     cv2.ADAPTIVE_THRESH_MEAN_C,
     cv2.THRESH_BINARY,
     blockSize=9,
     C=2)
 
 # 算法处理后,照片的尺寸可能会不统一
 # 把照片的尺寸统一化
 height=img_rgb.shape[0]
 width = img_rgb.shape[1]
 img_color=cv2.resize(img_color,(width,height))
 
 # 转换回彩色图像
 img_edge = cv2.cvtColor(img_edge, cv2.COLOR_GRAY2RGB)
 img_cartoon = cv2.bitwise_and(img_color, img_edge)

 # 保存转换后的图片
 cv2.imwrite(imgOutput_FileName, img_cartoon)
 print('文件转换成漫画成功,保存在' + imgOutput_FileName)


# 透明度转换 素描转换的一部分
def dodge(a, b, alpha):
 # alpha为图片透明度
 return min(int(a * 255 / (256 - b * alpha)), 255)


# 图片转换为素描
def toSketchStyle(picturePath, blur=25, alpha=1.0):
 # 设置输入输出路径和文件名称
 imgInput_FileName = picturePath
 imgOutput_FileName = picturePath.split(".")[0] + '_Sketch.' + picturePath.split(".")[1]

 # 转化成ima对象
 img = Image.open(picturePath)
 # 将文件转成灰色
 img1 = img.convert('L')

 img2 = img1.copy()

 img2 = ImageOps.invert(img2)

 # 模糊度
 for i in range(blur):
 img2 = img2.filter(ImageFilter.BLUR)
 width, height = img1.size
 for x in range(width):
 for y in range(height):
  a = img1.getpixel((x, y))
  b = img2.getpixel((x, y))
  img1.putpixel((x, y), dodge(a, b, alpha))

 # 保存转换后文件
 img1.save(imgOutput_FileName)
 print('文件转换成漫画成功,保存在' + imgOutput_FileName)


if __name__ == '__main__':
 imgInput_FileName = input('输入文件路径:')
 while True:
 print('1、漫画风格')
 print('2、素描风格')
 userChoose = input('请选择风格(输入序号即可):')
 if userChoose.__eq__('1'):
  toCarttonStyle(imgInput_FileName)
  break
 elif userChoose.__eq__('2'):
  toSketchStyle(imgInput_FileName)
  break
 else:
  print('违法输入(请输入序号)')
  break

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
浅谈Python的垃圾回收机制
Dec 17 Python
python字符串的方法与操作大全
Jan 30 Python
python实现爬取图书封面
Jul 05 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
Nov 07 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
Jun 27 Python
python求最大值,不使用内置函数的实现方法
Jul 09 Python
django 通过url实现简单的权限控制的例子
Aug 16 Python
Python线程threading模块用法详解
Feb 26 Python
Python爬虫实现百度翻译功能过程详解
May 29 Python
python如何进行基准测试
Apr 26 Python
Django drf请求模块源码解析
Jun 08 Python
图神经网络GNN算法
May 11 Python
python+django+selenium搭建简易自动化测试
Aug 19 #Python
python 中的命名空间,你真的了解吗?
Aug 19 #Python
13个Pandas实用技巧,助你提高开发效率
Aug 19 #Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
Aug 19 #Python
Python实现自动签到脚本的示例代码
Aug 19 #Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
Aug 19 #Python
Python容器类型公共方法总结
Aug 19 #Python
You might like
十天学会php之第六天
2006/10/09 PHP
求PHP数组最大值,最小值的代码
2011/10/31 PHP
PHP Curl多线程原理实例详解
2013/11/06 PHP
PHP命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
详谈PHP文件目录基础操作
2014/11/11 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
深入理解javascript学习笔记(一) 编写高质量代码
2012/08/09 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
JS获得URL超链接的参数值实例代码
2013/06/21 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
js 动态修改css文件的方法
2014/08/05 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
JS冒泡事件与事件捕获实例详解
2016/11/25 Javascript
EasyUI修改DateBox和DateTimeBox的默认日期格式示例
2017/01/18 Javascript
vue 如何添加全局函数或全局变量以及单页面的title设置总结
2017/06/01 Javascript
vue-router命名路由和编程式路由传参讲解
2019/01/19 Javascript
vue安装遇到的5个报错及解决方法
2019/06/12 Javascript
浅谈JavaScript 声明提升
2020/09/14 Javascript
python实现比较两段文本不同之处的方法
2015/05/30 Python
Django框架教程之正则表达式URL误区详解
2018/01/28 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
2018/05/30 Python
python3实现的zip格式压缩文件夹操作示例
2019/08/17 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
AJax面试题
2014/11/25 面试题
区域总监的岗位职责
2013/11/21 职场文书
教师党员岗位承诺书
2014/05/29 职场文书
刑事上诉状范文
2015/05/22 职场文书
幼儿园毕业典礼家长致辞
2015/07/29 职场文书
在pyCharm中下载第三方库的方法
2021/04/18 Python
Python 制作自动化翻译工具
2021/04/25 Python
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python
一篇文章了解正则表达式的替换技巧
2022/02/24 Javascript