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中查看文件名和文件路径
Mar 31 Python
Python+tkinter使用80行代码实现一个计算器实例
Jan 16 Python
Python中的默认参数实例分析
Jan 29 Python
python列表list保留顺序去重的实例
Dec 14 Python
python生成带有表格的图片实例
Feb 03 Python
Python HTML解析模块HTMLParser用法分析【爬虫工具】
Apr 05 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
Jul 15 Python
对python中不同模块(函数、类、变量)的调用详解
Jul 16 Python
python Gunicorn服务器使用方法详解
Jul 22 Python
Python 异步协程函数原理及实例详解
Nov 13 Python
Python彻底删除文件夹及其子文件方式
Dec 23 Python
Django框架请求生命周期实现原理
Nov 13 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
磨咖啡豆的密诀
2021/03/03 冲泡冲煮
php截取字符串并保留完整xml标签的函数代码
2013/02/06 PHP
PHP+Mysql+Ajax+JS实现省市区三级联动
2014/05/23 PHP
PHP实现查询两个数组中不同元素的方法
2016/02/23 PHP
thinkPHP交易详情查询功能详解
2016/12/02 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
jquery动态加载js三种方法实例
2013/08/03 Javascript
angularjs学习笔记之三大模块(modal,controller,view)
2015/09/26 Javascript
解决JS请求服务器gbk文件乱码的问题
2015/10/16 Javascript
JavaScript中的跨浏览器事件操作的基本方法整理
2016/05/20 Javascript
js实现div模拟模态对话框展现URL内容
2016/05/27 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
nodejs爬虫遇到的乱码问题汇总
2017/04/07 NodeJs
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
JavaScript编写棋盘覆盖代码详解
2017/08/28 Javascript
vue实现nav导航栏的方法
2017/12/13 Javascript
JS遍历JSON数组及获取JSON数组长度操作示例【测试可用】
2018/12/12 Javascript
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
Vue.js桌面端自定义滚动条组件之美化滚动条VScroll
2020/12/01 Vue.js
Python中unittest用法实例
2014/09/25 Python
Python中的对象,方法,类,实例,函数用法分析
2015/01/15 Python
pandas将numpy数组写入到csv的实例
2018/07/04 Python
Python合并多个Excel数据的方法
2018/07/16 Python
windows上安装python3教程以及环境变量配置详解
2019/07/18 Python
python 如何调用远程接口
2020/09/11 Python
python实现数学模型(插值、拟合和微分方程)
2020/11/13 Python
scrapy处理python爬虫调度详解
2020/11/23 Python
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
竞选大队长演讲稿
2014/04/29 职场文书
售后服务承诺书模板
2014/05/21 职场文书
团队拓展活动总结
2014/08/27 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
南京南京观后感
2015/06/02 职场文书
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫
引用计数法和root搜索算法以及JVM中判定对象需要回收的方法
2022/04/19 Java/Android