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实现登陆知乎获得个人收藏并保存为word文件
Mar 16 Python
tensorflow 输出权重到csv或txt的实例
Jun 14 Python
python多线程并发实例及其优化
Jun 27 Python
Python 微信爬虫完整实例【单线程与多线程】
Jul 06 Python
获取Pytorch中间某一层权重或者特征的例子
Aug 17 Python
VSCode中自动为Python文件添加头部注释
Nov 14 Python
使用卷积神经网络(CNN)做人脸识别的示例代码
Mar 27 Python
Django Channel实时推送与聊天的示例代码
Apr 30 Python
使用Python实现批量ping操作方法
May 06 Python
python3获取控制台输入的数据的具体实例
Aug 16 Python
python3中calendar返回某一时间点实例讲解
Nov 18 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
Nov 28 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文件夹与文件目录操作函数介绍
2013/09/09 PHP
PHP 数组基本操作方法详解
2016/06/17 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
载入jQuery库的最佳方法详细说明及实现代码
2012/12/28 Javascript
JQuery伸缩导航练习示例
2013/11/13 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
transport.js和jquery冲突问题的解决方法
2015/02/10 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
JavaScript中offsetWidth的bug及解决方法
2017/05/17 Javascript
jQuery插件artDialog.js使用与关闭方法示例
2017/10/09 jQuery
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
Python中操作MySQL入门实例
2015/02/08 Python
python使用str & repr转换字符串
2016/10/13 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
机器学习python实战之决策树
2017/11/01 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
python微信公众号开发简单流程
2018/03/23 Python
python 执行文件时额外参数获取的实例
2018/12/18 Python
Python3实现配置文件差异对比脚本
2019/11/18 Python
Python用户自定义异常的实现
2020/12/25 Python
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
伦敦一家西班牙童装精品店:La Coqueta
2018/02/02 全球购物
家长给孩子的评语
2014/01/30 职场文书
小学生竞选班干部演讲稿
2014/04/24 职场文书
股份合作协议书
2014/09/10 职场文书
教师党员自我评价范文
2015/03/04 职场文书
行政介绍信范文
2015/05/04 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
golang 实用库gotable的具体使用
2021/07/01 Golang
Oracle配置dblink访问PostgreSQL的操作方法
2022/03/21 PostgreSQL