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 相关文章推荐
centos下更新Python版本的步骤
Feb 12 Python
python实现DNS正向查询、反向查询的例子
Apr 25 Python
python黑魔法之编码转换
Jan 25 Python
Python调用微信公众平台接口操作示例
Jul 08 Python
Python找出微信上删除你好友的人脚本写法
Nov 01 Python
Django框架模板文件使用及模板文件加载顺序分析
May 23 Python
利用Tensorboard绘制网络识别准确率和loss曲线实例
Feb 15 Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 Python
python中Ansible模块的Playbook的具体使用
May 28 Python
Windows下Sqlmap环境安装教程详解
Aug 04 Python
能让Python提速超40倍的神器Cython详解
Jun 24 Python
python元组打包和解包过程详解
Aug 02 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中使用XML
2006/10/09 PHP
PHP调用Twitter的RSS的实现代码
2010/03/10 PHP
PHP数据流应用的一个简单实例
2012/09/14 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
2020/04/23 PHP
jQuery 表格插件整理
2010/04/27 Javascript
js 采用delete实现继承示例代码
2014/05/20 Javascript
jQuery+css3实现Ajax点击后动态删除功能的方法
2015/08/10 Javascript
jquery选择器简述
2015/08/31 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
2015/11/15 Javascript
jQuery 3.0 的 setter和getter 模式详解
2016/07/11 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
使用Node.js实现RESTful API的示例
2017/08/01 Javascript
Vue组件之Tooltip的示例代码
2017/10/18 Javascript
详解Vue之父子组件传值
2019/04/01 Javascript
webpack常用构建优化策略小结
2019/11/21 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
js实现百度淘宝搜索功能
2020/02/17 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
Python 文件操作实现代码
2009/10/07 Python
Python的动态重新封装的教程
2015/04/11 Python
对python numpy数组中冒号的使用方法详解
2018/04/17 Python
Python实现某论坛自动签到功能
2019/08/20 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
Html5 Canvas动画基础碰撞检测的实现
2018/12/06 HTML / CSS
钳工实习自我鉴定
2013/09/19 职场文书
宣传保护环境的公益广告词
2014/03/13 职场文书
校园标语大全
2014/06/19 职场文书
安全保卫工作竞聘材料
2014/08/25 职场文书
一般党员对照检查材料
2014/09/24 职场文书
2014年团总支工作总结
2014/11/21 职场文书
综合实践活动报告
2015/02/05 职场文书
团队拓展训练感想
2015/08/07 职场文书
关于antd tree 和父子组件之间的传值问题(react 总结)
2021/06/02 Javascript