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 struct模块解析
Jun 12 Python
Python的Twisted框架上手前所必须了解的异步编程思想
May 25 Python
Python内存管理方式和垃圾回收算法解析
Nov 11 Python
python入门教程 python入门神图一张
Mar 05 Python
python爬虫正则表达式之处理换行符
Jun 08 Python
flask框架单元测试原理与用法实例分析
Jul 23 Python
django rest framework 实现用户登录认证详解
Jul 29 Python
python数据持久存储 pickle模块的基本使用方法解析
Aug 30 Python
python matplotlib imshow热图坐标替换/映射实例
Mar 14 Python
Django之choices选项和富文本编辑器的使用详解
Apr 01 Python
python批量修改文件名的示例
Sep 27 Python
TensorFlow2.0使用keras训练模型的实现
Feb 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
东方红 - 来复式再生机的修复
2021/03/02 无线电
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
ThinkPHP分页实例
2014/10/15 PHP
php数组添加与删除单元的常用函数实例分析
2015/02/16 PHP
php 截取utf-8格式的字符串实例代码
2016/10/30 PHP
用JavaScript显示随机图像或引用
2009/04/21 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
只需一行代码,轻松实现一个在线编辑器
2013/11/12 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
js实现消息滚动效果
2017/01/18 Javascript
vue cli使用绝对路径引用图片问题的解决
2017/12/06 Javascript
微信小程序实现收货地址左滑删除
2020/11/18 Javascript
Element Notification通知的实现示例
2020/07/27 Javascript
Element InputNumber 计数器的实现示例
2020/08/03 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
2021/01/19 Vue.js
[02:17]TI4西雅图DOTA2前线报道 啸天mik夫妻档解说
2014/07/08 DOTA
初步认识Python中的列表与位运算符
2015/10/12 Python
使用Python搭建虚拟环境的配置方法
2018/02/28 Python
Python smtplib实现发送邮件功能
2018/05/22 Python
python的继承知识点总结
2018/12/10 Python
python使用 request 发送表单数据操作示例
2019/09/25 Python
Python ORM编程基础示例
2020/02/02 Python
python实现PolynomialFeatures多项式的方法
2021/01/06 Python
实现CSS3中的border-radius(边框圆角)示例代码
2013/07/19 HTML / CSS
HTML5之SVG 2D入门10—滤镜的定义及使用
2013/01/30 HTML / CSS
澳大利亚音乐商店:Bava’s Music City
2019/05/05 全球购物
解释一下钝化(Swap out)
2016/12/26 面试题
会计电算化应届生自荐信
2014/02/25 职场文书
销售口号大全
2014/06/11 职场文书
文明城市标语
2014/06/16 职场文书
人力资源管理专业求职信
2014/07/23 职场文书
2014年技术员工作总结
2014/11/18 职场文书
冰峪沟导游词
2015/02/09 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
30岁前绝不能错过的10本书
2019/08/08 职场文书
德劲DE1108畅想
2021/04/22 无线电