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 相关文章推荐
web.py获取上传文件名的正确方法
Aug 26 Python
在Python中操作日期和时间之gmtime()方法的使用
May 22 Python
Python创建对称矩阵的方法示例【基于numpy模块】
Oct 12 Python
pandas.dataframe按行索引表达式选取方法
Oct 30 Python
解析python的局部变量和全局变量
Aug 15 Python
python中必要的名词解释
Nov 20 Python
关于ZeroMQ 三种模式python3实现方式
Dec 23 Python
Python hashlib模块实例使用详解
Dec 24 Python
python爬虫学习笔记之pyquery模块基本用法详解
Apr 09 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
Apr 24 Python
python 元组的使用方法
Jun 09 Python
python 如何用terminal输入参数
May 25 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 session 错误
2009/05/21 PHP
php中filter_input函数用法分析
2014/11/15 PHP
PHP两种快速排序算法实例
2015/02/15 PHP
PHP使用CURL模拟登录的方法
2015/07/08 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
2017/02/24 PHP
PHP正则删除HTML代码中宽高样式的方法
2017/06/12 PHP
javascript操作符"!~"详解
2015/02/10 Javascript
JS判断页面是否出现滚动条的方法
2015/07/17 Javascript
实现音乐播放器的代码(html5+css3+jquery)
2015/08/04 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
2016/07/04 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
webpack 模块热替换原理
2018/04/09 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
2020/04/27 Javascript
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
轻松理解Python 中的 descriptor
2017/09/15 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
使用Python实现微信提醒备忘录功能
2018/12/04 Python
Python计算IV值的示例讲解
2020/02/28 Python
详解如何使用Pytest进行自动化测试
2021/01/14 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
中专生自我鉴定范文
2014/02/02 职场文书
2014年庆元旦活动方案
2014/02/15 职场文书
幼儿园毕业园长感言
2014/02/24 职场文书
物流专业求职信
2014/06/30 职场文书
奥巴马上海演讲稿
2014/09/10 职场文书
2014年纪检工作总结
2014/11/12 职场文书
发票退票证明
2015/06/24 职场文书
新闻通讯稿范文
2015/07/22 职场文书
二胎满月酒致辞
2015/07/29 职场文书
JS如何使用剪贴板操作Clipboard API
2021/05/17 Javascript
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL