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新手在作用域方面经常容易碰到的问题
Apr 03 Python
Django中模型Model添加JSON类型字段的方法
Jun 17 Python
Python2实现的LED大数字显示效果示例
Sep 04 Python
Python数据结构之双向链表的定义与使用方法示例
Jan 16 Python
Python元组及文件核心对象类型详解
Feb 11 Python
基于Python在MacOS上安装robotframework-ride
Dec 28 Python
Python获取数据库数据并保存在excel表格中的方法
Jun 12 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
Aug 09 Python
Python字典底层实现原理详解
Dec 18 Python
django 数据库返回queryset实现封装为字典
May 19 Python
Django 解决上传文件时,request.FILES为空的问题
May 20 Python
win10下python3.8的PIL库安装过程
Jun 08 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 常用类汇总 推荐收藏
2010/05/13 PHP
php中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
探讨方法的重写(覆载)详解
2013/06/08 PHP
memcache命令启动参数中文解释
2014/01/13 PHP
找到了一篇jQuery与Prototype并存的冲突的解决方法
2007/08/29 Javascript
使用jquery给input和textarea设定ie中的focus
2008/05/29 Javascript
不一样的文字闪烁 轮番闪烁
2009/11/11 Javascript
JQuery 学习技巧总结
2010/05/21 Javascript
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
最简单的js图片切换效果实现代码
2011/09/24 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
使用jquery清空、复位整个输入域
2015/04/02 Javascript
利用纯Vue.js构建Bootstrap组件
2016/11/03 Javascript
基于jQuery的select下拉框选择触发事件实例分析
2016/11/18 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
vue工程全局设置ajax的等待动效的方法
2019/02/22 Javascript
angular2 NgModel模块的具体使用方法
2019/04/10 Javascript
JS实现贪吃蛇游戏
2019/11/15 Javascript
JavaScript实现省份城市的三级联动
2020/02/11 Javascript
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
11个并不被常用但对开发非常有帮助的Python库
2015/03/31 Python
python实现ping的方法
2015/07/06 Python
python中os和sys模块的区别与常用方法总结
2017/11/14 Python
Python使用configparser库读取配置文件
2020/02/22 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
详解CSS3的opacity属性设置透明效果的用法
2016/05/09 HTML / CSS
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
销售人员中英文自荐信
2013/09/22 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
任命书标准格式
2015/03/02 职场文书
学困生转化工作总结
2015/08/13 职场文书
中秋节主题班会
2015/08/14 职场文书
七年级英语教学反思
2016/02/15 职场文书
python tkinter Entry控件的焦点移动操作
2021/05/22 Python
OpenCV全景图像拼接的实现示例
2021/06/05 Python