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 代码性能优化技巧分享
Aug 07 Python
Python中类的继承代码实例
Oct 28 Python
Python数据处理numpy.median的实例讲解
Apr 02 Python
Django进阶之CSRF的解决
Aug 01 Python
利用python打开摄像头及颜色检测方法
Aug 03 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
Aug 21 Python
利用python Selenium实现自动登陆京东签到领金币功能
Oct 31 Python
python opencv根据颜色进行目标检测的方法示例
Jan 15 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
Feb 25 Python
python生成13位或16位时间戳以及反向解析时间戳的实例
Mar 03 Python
python可视化大屏库big_screen示例详解
Nov 23 Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
May 11 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 判断常量,变量和函数是否存在
2009/04/26 PHP
php自动识别文件编码并转换为UTF-8的方法
2014/06/12 PHP
CI框架中zip类应用示例
2014/06/17 PHP
学习php设计模式 php实现访问者模式(Visitor)
2015/12/07 PHP
Laravel5.5新特性之友好报错以及展示详解
2017/08/13 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
2020/03/23 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
javascript ready和load事件的区别示例介绍
2013/08/30 Javascript
在jquery中combobox多选的不兼容问题总结
2013/12/24 Javascript
使用delegate方法为一个tr标签加一个链接
2014/06/27 Javascript
详解JavaScript中的Unescape()和String() 函数
2015/11/09 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
js实现做通讯录的索引滑动显示效果和滑动显示锚点效果
2017/02/18 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
微信小程序联网请求的轮播图
2017/07/07 Javascript
JS制作简易计算器的实例代码
2020/07/04 Javascript
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
Python的Django中将文件上传至七牛云存储的代码分享
2016/06/03 Python
python检测IP地址变化并触发事件
2018/12/26 Python
python flask安装和命令详解
2019/04/02 Python
django ajax发送post请求的两种方法
2020/01/05 Python
关于初始种子自动选取的区域生长实例(python+opencv)
2020/01/16 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
css3动画鼠标放上图片逐渐变大鼠标离开图片逐渐缩小效果
2021/01/27 HTML / CSS
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
Belvilla法国:休闲度假房屋出租
2020/10/03 全球购物
关爱残疾人演讲稿
2014/05/24 职场文书
承诺书范文
2014/06/03 职场文书
优秀中职教师事迹材料
2014/08/26 职场文书
商业用房租赁协议书
2014/10/13 职场文书
新员工入职欢迎词
2015/01/23 职场文书
创业开店,这样方式更合理
2019/08/26 职场文书
Redis可视化客户端小结
2021/06/10 Redis