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 相关文章推荐
pygame学习笔记(5):游戏精灵
Apr 15 Python
Python列出一个文件夹及其子目录的所有文件
Jun 30 Python
django 使用 request 获取浏览器发送的参数示例代码
Jun 11 Python
python实现Zabbix-API监控
Sep 17 Python
python3+selenium自动化测试框架详解
Mar 17 Python
python频繁写入文件时提速的方法
Jun 26 Python
Python基本语法之运算符功能与用法详解
Oct 22 Python
Python使用指定字符长度切分数据示例
Dec 05 Python
python实现根据给定坐标点生成多边形mask的例子
Feb 18 Python
python实现超级玛丽游戏
Mar 18 Python
Python函数基本使用原理详解
Mar 19 Python
python3 中使用urllib问题以及urllib详解
Aug 03 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
微信公众平台开发教程①获取用户Openid及个人信息图文详解
2019/04/10 PHP
一个多次搜索+多次传值的解决方案
2007/01/20 Javascript
为指定元素增加样式的js代码
2009/12/09 Javascript
js+xml生成级联下拉框代码
2012/07/24 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
轻松掌握JavaScript中的Math object数学对象
2016/05/26 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
jQuery实现CheckBox全选、全不选功能
2017/01/11 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
ajax +NodeJS 实现图片上传实例
2017/06/06 NodeJs
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
JavaScript实现左侧菜单效果
2017/12/14 Javascript
JavaScript创建对象方法实例小结
2018/09/03 Javascript
微信小程序使用for循环动态渲染页面操作示例
2018/12/25 Javascript
js实现随机8位验证码
2020/07/24 Javascript
js实现多个标题吸顶效果
2020/01/08 Javascript
[03:33]TI9战队采访 - Infamous
2019/08/20 DOTA
[03:01]完美盛典趣味短片 DOTA2年度最佳&拉胯英雄
2019/12/07 DOTA
Python编程实现线性回归和批量梯度下降法代码实例
2018/01/04 Python
python之matplotlib学习绘制动态更新图实例代码
2018/01/23 Python
几种实用的pythonic语法实例代码
2018/02/24 Python
pandas 使用apply同时处理两列数据的方法
2018/04/20 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
python 把列表转化为字符串的方法
2018/10/23 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
python中的global关键字的使用方法
2019/08/20 Python
HTML5无刷新改变当前url的代码
2017/03/15 HTML / CSS
在Ajax应用中信息是如何在浏览器和服务器之间传递的
2016/05/31 面试题
董事长职责范文
2013/11/08 职场文书
经销商培训邀请函
2014/01/21 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
python实现会员信息管理系统(List)
2022/03/18 Python
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js