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开发常用的一些开源Package分享
Feb 14 Python
使用Python构建Hopfield网络的教程
Apr 14 Python
Python2.x利用commands模块执行Linux shell命令
Mar 11 Python
python通过pip更新所有已安装的包实现方法
May 19 Python
Python中一行和多行import模块问题
Apr 01 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 Python
Python利用heapq实现一个优先级队列的方法
Feb 03 Python
Python求均值,方差,标准差的实例
Jun 29 Python
python3 线性回归验证方法
Jul 09 Python
python画微信表情符的实例代码
Oct 09 Python
python 微信好友特征数据分析及可视化
Jan 07 Python
python3格式化字符串 f-string的高级用法(推荐)
Mar 04 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
smarty+adodb+部分自定义类的php开发模式
2006/12/31 PHP
PHP 常用数组内部函数(Array Functions)介绍
2013/06/05 PHP
PHP中SimpleXML函数用法分析
2014/11/26 PHP
Jquery cookie操作代码
2010/03/14 Javascript
基于jquery的tab切换 js原理
2010/04/01 Javascript
javascript 内存回收机制理解
2011/01/17 Javascript
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
通过JS来判断页面控件是否获取焦点
2014/01/03 Javascript
node.js使用cluster实现多进程
2016/03/17 Javascript
jquery跟随屏幕滚动效果的实现代码
2016/04/13 Javascript
BootStrap扔进Django里的方法详解
2016/05/13 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
vue.js动态数据绑定学习笔记
2017/05/19 Javascript
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
JS中的多态实例详解
2017/10/15 Javascript
浅谈 Vue 项目优化的方法
2017/12/16 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
javascript实现放大镜功能
2020/12/09 Javascript
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
Python Xml文件添加字节属性的方法
2018/03/31 Python
Python中关键字global和nonlocal的区别详解
2018/09/03 Python
Python使用正则表达式分割字符串的实现方法
2019/07/16 Python
python 读取、写入txt文件的示例
2020/09/27 Python
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
a标签下载链接的简单实现
2016/09/13 HTML / CSS
解决HTML5中的audio在手机端和微信端的不能自动播放问题
2019/11/04 HTML / CSS
韩都衣舍天猫官方旗舰店:天猫女装销售总冠军
2017/10/10 全球购物
瑞典轮胎在线:Tirendo.se
2018/06/21 全球购物
公务员平时考核实施方案
2014/03/11 职场文书
2014年安全生产目标责任书
2014/07/23 职场文书
党员个人对照检查材料
2014/10/01 职场文书
2015年创先争优活动总结
2015/03/27 职场文书
2015年话务员工作总结
2015/04/29 职场文书
运动员加油词
2015/07/18 职场文书
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS