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中getaddrinfo()基本用法实例分析
Jun 28 Python
Python实现的计数排序算法示例
Nov 29 Python
Python3.6安装及引入Requests库的实现方法
Jan 24 Python
解决Python运行文件出现out of memory框的问题
Dec 03 Python
Python3爬楼梯算法示例
Mar 04 Python
Django框架自定义session处理操作示例
May 27 Python
基于python traceback实现异常的获取与处理
Dec 13 Python
Python利用FFT进行简单滤波的实现
Feb 26 Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
May 20 Python
python如何快速生成时间戳
Jul 21 Python
Python pexpect模块及shell脚本except原理解析
Aug 03 Python
Python初学者必备的文件读写指南
Jun 23 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
JS实现php的伪分页
2008/05/25 PHP
php 5.6版本中编写一个PHP扩展的简单示例
2015/01/20 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
js 面向对象的技术创建高级 Web 应用程序
2010/02/25 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
jquery中$each()方法的使用指南
2015/04/30 Javascript
javascript实现网页端解压并查看zip文件
2015/12/15 Javascript
js中通过getElementsByName访问name集合对象的方法
2016/10/31 Javascript
jQuery简易时光轴实现方法示例
2017/03/13 Javascript
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
解决vue+element 键盘回车事件导致页面刷新的问题
2018/08/25 Javascript
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
Python smallseg分词用法实例分析
2015/05/28 Python
Python进行数据提取的方法总结
2016/08/22 Python
K-means聚类算法介绍与利用python实现的代码示例
2017/11/13 Python
Python编程求质数实例代码
2018/01/31 Python
python取代netcat过程分析
2018/02/10 Python
Python 元类实例解析
2018/04/04 Python
python matlibplot绘制3D图形
2018/07/02 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
tensorflow 初始化未初始化的变量实例
2020/02/06 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
HTML5未来发展趋势
2016/02/01 HTML / CSS
GoPro摄像机美国官网:美国运动相机厂商
2018/07/03 全球购物
会计员岗位职责
2014/03/15 职场文书
委托证明模板
2014/09/16 职场文书
检查机关党的群众路线个人整改措施
2014/10/04 职场文书
三峡大坝导游词
2015/01/31 职场文书
2015年小学体育教师工作总结
2015/10/23 职场文书