本工具使用python编写,将彩色图片转成黑白素描手绘图。

在python源码里可以调节其参数,尽量调到最好的效果。

使用颜色鲜艳的图片效果更佳!!参考文章:http://www.askaswiss.com/2016/01/how-to-create-pencil-sketch-opencv-python.html

将图片转为素描主要有4个步骤:

首先将彩色图转换成灰度图;

对灰度图进行求其反色的操作;

对第2步得到的结果采用一个高斯模糊的操作;

采用颜色亮化(color dodge)的技术将第一步的灰度图和第三步操作后的图片进行混合。

主要使用的是opencv模块。

源码:# -*- coding:utf-8 -*- import cv2import numpy as npfrom tkinter import filedialog, Tkfrom os import getcwdfrom re import findall def open_path(): # 图片路径 root = Tk() root.withdraw() file_path = (filedialog.askopenfilename(title='选择图片文件', filetypes=[('All Files', '*')])) return file_path def dodgeNaive(image, mask): # determine the shape of the input image width, height = image.shape[:2] # prepare output argument with same size as image blend = np.zeros((width, height), np.uint8) for col in range(width): for row in range(height): # do for every pixel if mask[col, row] == 255: # avoid division by zero blend[col, row] = 255 else: # shift image pixel value by 8 bits # divide by the inverse of the mask tmp = (image[col, row] << 8) / (255 - mask) # print('tmp={}'.format(tmp.shape)) # make sure resulting value stays within bounds if tmp.any() > 255: tmp = 255 blend[col, row] = tmp return blend def dodgeV2(image, mask): return cv2.divide(image, 255 - mask, scale=256) def burnV2(image, mask): return 255 - cv2.divide(255 - image, 255 - mask, scale=256) def rgb_to_sketch(src_image_name): print('转换中......') img_rgb = cv2.imread(src_image_name) img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY) # 读取图片时直接转换操作 # img_gray = cv2.imread('example.jpg', cv2.IMREAD_GRAYSCALE) img_gray_inv = 255 - img_gray img_blur = cv2.GaussianBlur(img_gray_inv, ksize=(21, 21), sigmaX=0, sigmaY=0) img_blend = dodgeV2(img_gray, img_blur) # cv2.imshow('original', img_rgb) # cv2.imshow('gray', img_gray) # cv2.imshow('gray_inv', img_gray_inv) # cv2.imshow('gray_blur', img_blur) cv2.imwrite(dst_image_name, img_blend) save_path = getcwd() + "\\\\" + dst_image_name # 保存路径 print('转换完成!!!\\n') print('保存路径:' + save_path) cv2.imshow(save_path, img_blend) cv2.waitKey(0) cv2.destroyAllWindows() if __name__ == '__main__': print('请选择图片(路径不要含中文):') src_image_name = open_path() # 文件路径 print(src_image_name+'\\n') image_name = ''.join(findall(r'[^\\\\/:*?"<>|\\r\\n]+$', src_image_name)) # 获取文件名 dst_image_name = 'Sketch_' + image_name rgb_to_sketch(src_image_name)

下载权限查看 ¥

免费下载

评论后下载

登录后下载

{{attr.name}}:

您当前的等级为

您有每天免费下载所有资源次的特权,今日剩余次 已取得下载权限

No related posts.

用python给女朋友画素描_【python小工具】不给你的女朋友来张素描吗?使用python将图片转素描...相关推荐

  1. 视频教程-微信小程序系统教程python版[3/3阶段]_微信小程序支付-手游开发

    微信小程序系统教程python版[3/3阶段]_微信小程序支付 微信企业号星级会员.10多年软件从业经历,国家级软件项目负责人,主要从事软件研发.软件企业员工技能培训.已经取得计算机技术与软件资格考试 ...

  2. 使用python制作读取示波器波形的GUI小工具

    使用python制作读取示波器波形的GUI小工具 1.使用python创建GUI界面,该界面可以读取CSV数据格式的示波器波形并绘制在GUI界面上 2.可以zoom缩放操作 3.源码见链接 https ...

  3. python动态图片转字符画_【小工具】使用python将图片转彩色字符画

    [Python] 纯文本查看 复制代码# -*- coding:utf-8 -*- from PIL import Image, ImageFont, ImageDraw from tkinter i ...

  4. python用turtle画月亮_使用Python的turtle画小猪乔治和哆啦 A 梦

    本人是Python新人小白,欢迎各位大佬指正,本文介绍的是用Python的turtle画一只小猪乔治. 还有本人画画基础超级差= =没天赋,画参考度娘上的一个图片画的. 先上总代码,然后说说我写的思路 ...

  5. python海龟绘图画海螺_我学会了画画100字

    我学会了画画100字 时间:05-09 作者: 篇一:我学会了画画[100字] 杜昊航 今天下午上了美术课,美术课佷有意思,今天把我们上节课画的钟表.楼房.轮船.蘑菇都涂了颜色.我把送货物的轮船涂完了 ...

  6. python语言如何画圆_怎么用python画圆

    详细内容 python中内置了许多第三方库,来帮助它完成各种功能. Turtle库就是Python语言中一个很流行的绘制图像的函数库(推荐学习:Python视频教程) Turtl库用于绘制线.圆.其他 ...

  7. python使用变量画圆_怎么用python画圆

    python中内置了许多第三方库,来帮助它完成各种功能. Turtle库就是Python语言中一个很流行的绘制图像的函数库(推荐学习:Python视频教程) Turtl库用于绘制线.圆.其他形状或者文 ...

  8. python常用的表达式有关系表达式_数学关系式 表示成正确的 Python表达式为_________。_学小易找答案...

    [单选题]下列选项中,不属于 Python特点的是_______. [判断题]在经济计量分析中,模型参数一旦被估计出来,就可直接运用于实际的计量经济分析. [多选题]计量经济模型的应用在于( ) [填 ...

  9. 十位数和个位数交换python_整型变量 x中存放了一个两位数,要将这个两位数的个位数字和十位数字交换位置,例如,13变成31,正确的Python表达式是________。_学小易找答案...

    [多选题]计量经济学检验主要是检验模型是否符合计量经济方法的基本假定.检验内容包括( ) [填空题](_)是运用理论计量经济学提供的工具,研究经济学中某些特定领域的经济数量问题. [多选题]下列属于时 ...

  10. 以下可以采用python语言保留字的是-以下选项中,不是Python语言保留字的是_学小易找答案...

    [单选题]以下选项中,不是 Python 语言保留字的是 [连线题]将动机理论及其解释说明连线: [单选题]以下选项中,不是Python语言合法命名的是 [单选题]在Python函数中,用于获取用户输 ...

最新文章

  1. CSS在ASP.NET中使用
  2. 【Android-功能】Android应用增量更新
  3. 《漫画算法2》源码整理-2 图算法
  4. 基于 Kafka + Flink + Redis 的电商大屏实时计算案
  5. Codeforces Round #515 (Div. 3)【未完结】
  6. TypeScript 参数属性
  7. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1094:与7无关的数
  8. 微软服务器收费吗,了解 Azure 外部服务收费
  9. 介绍一个统计键盘和鼠标输入情况的工具软件
  10. hexo本地博客的转移
  11. linux文件移动到hdfs,解决从linux本地文件系统上传文件到HDFS时的权限问题
  12. Hibernate的表之间的关系
  13. 0018-大数据售前的中年危机
  14. 【图像处理】高斯模糊、高斯函数、高斯核、高斯卷积操作
  15. IGBT芯片赛道竞争激烈,水光半导体Wassersun推出全新IGBT制程技术
  16. 大学生 大创 软著申请指南(图文含模板)(专用于大创,这篇就够了!纯干货!)
  17. 产品经理必会知识:万字长文 | 史上最全的付费会员体系分析
  18. 虚拟机dns服务器不可以,windows虚拟机中DNS服务配置
  19. (个人解题思路系列)五子棋
  20. 从长尾市场切入 鲲云科技能做出一颗AI芯吗

热门文章

  1. 应“疫”而生的英文单词
  2. 嵌入式单片机及外设(硬件)知识基础二
  3. 什么是HTML语义化?有哪些好处?
  4. 计算机数控机床的原理,数控机床5计算机数控装置原理.ppt
  5. bat脚本设置窗口颜色
  6. 阿平小记之代码之路(一)
  7. 新网域名管理后台介绍
  8. 【干货】Chrome插件(扩展)开发全攻略-转载
  9. 虚拟机网络如何ping通
  10. 学习linux,用虚拟机还是双系统?