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通过PIL获取图片主要颜色并和颜色库进行对比的方法
Mar 19 Python
python获取一组汉字拼音首字母的方法
Jul 01 Python
Python函数中*args和**kwargs来传递变长参数的用法
Jan 26 Python
解决python文件字符串转列表时遇到空行的问题
Jul 09 Python
Python FTP两个文件夹间的同步实例代码
May 25 Python
python将txt文件读入为np.array的方法
Oct 30 Python
Numpy将二维数组添加到空数组的实现
Dec 05 Python
Python 从attribute到property详解
Mar 05 Python
python爬虫 requests-html的使用
Nov 30 Python
Pandas对每个分组应用apply函数的实现
Dec 13 Python
pytorch 中nn.Dropout的使用说明
May 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
一个php作的文本留言本的例子(四)
2006/10/09 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
2013/10/10 PHP
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
AJAX的使用方法详解
2017/04/29 PHP
PHP封装XML和JSON格式数据接口操作示例
2019/03/06 PHP
收集json解析的四种方法分享
2014/01/17 Javascript
JavaScript立即执行函数的三种不同写法
2014/09/05 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
AngularJS入门教程中SQL实例详解
2016/07/27 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
Vue异步组件使用详解
2017/04/08 Javascript
详解vue2父组件传递props异步数据到子组件的问题
2017/06/29 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
jquery实现烟花效果(面向对象)
2020/03/10 jQuery
[16:21]教你分分钟做大人:圣堂刺客
2014/12/03 DOTA
python操作MySQL数据库具体方法
2013/10/28 Python
Python的Tornado框架异步编程入门实例
2015/04/24 Python
python web框架学习笔记
2016/05/03 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
Python 解析pymysql模块操作数据库的方法
2020/02/18 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
Python数据可视化图实现过程详解
2020/06/12 Python
苹果香港官方商城:Apple香港
2016/09/14 全球购物
奥地利网上书店:Weltbild
2017/07/14 全球购物
银行学习十八大感想
2014/01/11 职场文书
2014年大学生自我评价
2014/01/19 职场文书
旅游业大学生创业计划书
2014/01/31 职场文书
市场总经理岗位职责
2014/04/11 职场文书
医生个人自我剖析材料
2014/10/08 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python
Python Pygame实战在打砖块游戏的实现
2022/03/17 Python
使用python求解迷宫问题的三种实现方法
2022/03/17 Python
解决redis批量删除key值的问题
2022/03/23 Redis
MySQL数据库之内置函数和自定义函数 function
2022/06/16 MySQL