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登录Dr.com思路以及代码分享
Jun 25 Python
Python去除列表中重复元素的方法
Mar 20 Python
Python编程中的文件操作攻略
Oct 16 Python
Unicode和Python的中文处理
Mar 19 Python
浅谈python日志的配置文件路径问题
Apr 28 Python
Python 多维List创建的问题小结
Jan 18 Python
Python一个简单的通信程序(客户端 服务器)
Mar 06 Python
Python实例方法、类方法、静态方法的区别与作用详解
Mar 25 Python
三步解决python PermissionError: [WinError 5]拒绝访问的情况
Apr 22 Python
Python selenium键盘鼠标事件实现过程详解
Jul 28 Python
python模块内置属性概念及实例
Feb 18 Python
Python 中面向接口编程
May 20 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
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
php魔术函数__call()用法实例分析
2015/02/13 PHP
微信支付PHP SDK之微信公众号支付代码详解
2015/12/09 PHP
php中namespace use用法实例分析
2016/01/22 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
javascript ie6兼容position:fixed实现思路
2013/04/01 Javascript
用js实现小球的自由移动代码
2013/04/22 Javascript
jquery动态添加删除div 具体实现
2013/07/20 Javascript
JavaScript Math.ceil() 函数使用介绍
2013/12/11 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
JavaScript中校验银行卡号的实现代码
2016/12/19 Javascript
浅谈Koa2框架利用CORS完成跨域ajax请求
2018/03/06 Javascript
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
Python标准库之多进程(multiprocessing包)介绍
2014/11/25 Python
Python中用Decorator来简化元编程的教程
2015/04/13 Python
pandas 获取季度,月度,年度首尾日期的方法
2018/04/11 Python
python和pygame实现简单俄罗斯方块游戏
2021/02/19 Python
Python3多线程基础知识点
2019/02/19 Python
基于wxPython的GUI实现输入对话框(2)
2019/02/27 Python
Homestay中文官网:全球寄宿家庭
2018/10/18 全球购物
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
潘多拉珠宝俄罗斯官方网上商店:PANDORA俄罗斯
2020/09/22 全球购物
化学教师教学反思
2014/01/17 职场文书
生产部厂长职位说明书
2014/03/03 职场文书
法律系毕业生求职信
2014/05/28 职场文书
优质服务口号
2014/06/11 职场文书
个人四风问题对照检查材料
2014/10/01 职场文书
2014年社区工会工作总结
2014/12/18 职场文书
员工工作表现自我评价
2015/03/06 职场文书
小学教师党员承诺书
2015/04/27 职场文书
校园安全学习心得体会
2016/01/18 职场文书
Android Studio实现简易进制转换计算器
2022/05/20 Java/Android