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脚本实现网卡流量监控
Feb 14 Python
使用graphics.py实现2048小游戏
Mar 10 Python
如何使用python爬取csdn博客访问量
Feb 14 Python
Python用UUID库生成唯一ID的方法示例
Dec 15 Python
Python标准模块--ContextManager上下文管理器的具体用法
Nov 27 Python
Python实现获取前100组勾股数的方法示例
May 04 Python
python实现NB-IoT模块远程控制
Jun 20 Python
django框架之cookie/session的使用示例(小结)
Oct 15 Python
Django跨域请求CSRF的方法示例
Nov 11 Python
对Python的多进程锁的使用方法详解
Feb 18 Python
如何用Python徒手写线性回归
Jan 25 Python
Python中第三方库Faker的使用详解
Apr 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中通过ADO调用Access数据库的方法测试不通过
2006/12/31 PHP
PHP中英混合字符串截取函数代码
2011/07/17 PHP
php网上商城购物车设计代码分享
2012/02/15 PHP
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
如何在Ubuntu下启动Apache的Rewrite功能
2013/07/05 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
读jQuery之二(两种扩展)
2011/06/11 Javascript
json的前台操作和后台操作实现代码
2012/01/20 Javascript
jQuery使用数组编写图片无缝向左滚动
2012/12/11 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
2015/10/17 Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
2017/04/13 Javascript
Iscrool下拉刷新功能实现方法(推荐)
2017/06/26 Javascript
jQuery除指定区域外点击任何地方隐藏DIV功能
2017/11/13 jQuery
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
浅谈vue首屏加载优化
2018/06/28 Javascript
详解jQuery中的easyui
2018/09/02 jQuery
4个顶级JavaScript高级文本编辑器
2018/10/10 Javascript
微信小程序实现日历效果
2018/12/28 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
Python实现随机选择元素功能
2017/09/14 Python
AmazeUi Tree(树形结构) 应用小结
2020/08/17 HTML / CSS
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
计算机科学与技术应届生求职信
2013/11/07 职场文书
自我评价如何写好?
2014/01/05 职场文书
小学庆六一活动方案
2014/02/28 职场文书
担保书格式及范文
2014/04/01 职场文书
庆六一文艺汇演活动方案
2014/08/26 职场文书
食品药品安全责任书
2015/05/11 职场文书
辣妈辣妹观后感
2015/06/10 职场文书
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers