[其他] 使用python将图片转素描 by_ 逸少凌仙

  [复制链接]
唐章小小社区官方认证 发表于 2020-4-8 18:36 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
本工具使用python编写,将彩色图片转成黑白素描手绘图。
在python源码里可以调节其参数,尽量调到最好的效果。
使用颜色鲜艳的图片效果更佳!!参考文章:http://www.askaswiss.com/2016/01 ... -opencv-python.html

将图片转为素描主要有4个步骤:
首先将彩色图转换成灰度图;
对灰度图进行求其反色的操作;
对第2步得到的结果采用一个高斯模糊的操作;
采用颜色亮化(color dodge)的技术将第一步的灰度图和第三步操作后的图片进行混合。


主要使用的是opencv模块。

原图:

1.jpg

素描图:


2.jpg

软件运行界面:


3.png


  1. # -*- coding:utf-8 -*-


  2. import cv2
  3. import numpy as np
  4. from tkinter import filedialog, Tk
  5. from os import getcwd
  6. from re import findall


  7. def open_path():
  8.     # 图片路径
  9.     root = Tk()
  10.     root.withdraw()
  11.     file_path = (filedialog.askopenfilename(title='选择图片文件', filetypes=[('All Files', '*')]))
  12.     return file_path


  13. def dodgeNaive(image, mask):
  14.     # determine the shape of the input image
  15.     width, height = image.shape[:2]

  16.     # prepare output argument with same size as image
  17.     blend = np.zeros((width, height), np.uint8)

  18.     for col in range(width):
  19.         for row in range(height):
  20.             # do for every pixel
  21.             if mask[col, row] == 255:
  22.                 # avoid division by zero
  23.                 blend[col, row] = 255
  24.             else:
  25.                 # shift image pixel value by 8 bits
  26.                 # divide by the inverse of the mask
  27.                 tmp = (image[col, row] << 8) / (255 - mask)
  28.                 # print('tmp={}'.format(tmp.shape))
  29.                 # make sure resulting value stays within bounds
  30.                 if tmp.any() > 255:
  31.                     tmp = 255
  32.                     blend[col, row] = tmp

  33.     return blend


  34. def dodgeV2(image, mask):
  35.     return cv2.divide(image, 255 - mask, scale=256)


  36. def burnV2(image, mask):
  37.     return 255 - cv2.divide(255 - image, 255 - mask, scale=256)


  38. def rgb_to_sketch(src_image_name):
  39.     print('转换中......')
  40.     img_rgb = cv2.imread(src_image_name)
  41.     img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
  42.     # 读取图片时直接转换操作
  43.     # img_gray = cv2.imread('example.jpg', cv2.IMREAD_GRAYSCALE)

  44.     img_gray_inv = 255 - img_gray
  45.     img_blur = cv2.GaussianBlur(img_gray_inv, ksize=(21, 21),
  46.                                 sigmaX=0, sigmaY=0)
  47.     img_blend = dodgeV2(img_gray, img_blur)

  48.     # cv2.imshow('original', img_rgb)
  49.     # cv2.imshow('gray', img_gray)
  50.     # cv2.imshow('gray_inv', img_gray_inv)
  51.     # cv2.imshow('gray_blur', img_blur)
  52.     cv2.imwrite(dst_image_name, img_blend)
  53.     save_path = getcwd() + "\" + dst_image_name  # 保存路径
  54.     print('转换完成!!!\n')
  55.     print('保存路径:' + save_path)
  56.     cv2.imshow(save_path, img_blend)
  57.     cv2.waitKey(0)
  58.     cv2.destroyAllWindows()


  59. if __name__ == '__main__':
  60.     print('请选择图片(路径不要含中文):')
  61.     src_image_name = open_path()  # 文件路径
  62.     print(src_image_name+'\n')
  63.     image_name = ''.join(findall(r'[^\\/:*?"<>|\r\n]+

  64. 打包后exe蓝奏云下载地址:[url]https://www.lanzoui.com/ib1434d[/url]


  65. 备用下载地址

  66. [hide]https://8ziyuan.cowtransfer.com/s/9553381a94e742[/hide]

  67. , src_image_name))  # 获取文件名
  68.     dst_image_name = 'Sketch_' + image_name
  69.     rgb_to_sketch(src_image_name)
复制代码


打包后exe蓝奏云下载地址:https://www.lanzoui.com/ib1434d


备用下载地址

游客,如果您要查看本帖隐藏内容请回复


温馨提示

记得善用社区搜索功能,那里可能会有你想要的资源;论坛站内搜索

如果你有什么需要的资源可以去悬赏问答发帖,求助社区的网友,我们会在第一时间给你回复哦;资源求档

对于本社区如果你有任何好建议或者相关合作可以随时与我们联系,或者在反馈建议发帖,您的支持,是我们发展的最大动力;投诉建议

精彩评论24

为爱搁浅心脏 发表于 2020-4-8 19:37 | 显示全部楼层
感恩分享多谢

温馨提示

记得善用社区搜索功能,那里可能会有你想要的资源;论坛站内搜索

如果你有什么需要的资源可以去悬赏问答发帖,求助社区的网友,我们会在第一时间给你回复哦;资源求档

对于本社区如果你有任何好建议或者相关合作可以随时与我们联系,或者在反馈建议发帖,您的支持,是我们发展的最大动力;投诉建议

yagshuag 发表于 2020-4-10 14:34 来自手机 | 显示全部楼层
谢谢分享,前来试试

温馨提示

记得善用社区搜索功能,那里可能会有你想要的资源;论坛站内搜索

如果你有什么需要的资源可以去悬赏问答发帖,求助社区的网友,我们会在第一时间给你回复哦;资源求档

对于本社区如果你有任何好建议或者相关合作可以随时与我们联系,或者在反馈建议发帖,您的支持,是我们发展的最大动力;投诉建议

LongGangqun 发表于 2020-4-11 09:38 | 显示全部楼层
这个真是绝了 谢谢分享

温馨提示

记得善用社区搜索功能,那里可能会有你想要的资源;论坛站内搜索

如果你有什么需要的资源可以去悬赏问答发帖,求助社区的网友,我们会在第一时间给你回复哦;资源求档

对于本社区如果你有任何好建议或者相关合作可以随时与我们联系,或者在反馈建议发帖,您的支持,是我们发展的最大动力;投诉建议

k0002111 发表于 2020-4-16 00:17 | 显示全部楼层
用python将图片转素描 by_ 逸

温馨提示

记得善用社区搜索功能,那里可能会有你想要的资源;论坛站内搜索

如果你有什么需要的资源可以去悬赏问答发帖,求助社区的网友,我们会在第一时间给你回复哦;资源求档

对于本社区如果你有任何好建议或者相关合作可以随时与我们联系,或者在反馈建议发帖,您的支持,是我们发展的最大动力;投诉建议

死挣扎! 发表于 2020-4-16 15:18 来自手机 | 显示全部楼层
thanks share~

温馨提示

记得善用社区搜索功能,那里可能会有你想要的资源;论坛站内搜索

如果你有什么需要的资源可以去悬赏问答发帖,求助社区的网友,我们会在第一时间给你回复哦;资源求档

对于本社区如果你有任何好建议或者相关合作可以随时与我们联系,或者在反馈建议发帖,您的支持,是我们发展的最大动力;投诉建议

雨下的樱花★ 发表于 2020-4-17 23:27 | 显示全部楼层
感谢你的分享啊

温馨提示

记得善用社区搜索功能,那里可能会有你想要的资源;论坛站内搜索

如果你有什么需要的资源可以去悬赏问答发帖,求助社区的网友,我们会在第一时间给你回复哦;资源求档

对于本社区如果你有任何好建议或者相关合作可以随时与我们联系,或者在反馈建议发帖,您的支持,是我们发展的最大动力;投诉建议

keepworkingsp 发表于 2020-4-19 16:22 来自手机 | 显示全部楼层
谢谢分享,前来试试

温馨提示

记得善用社区搜索功能,那里可能会有你想要的资源;论坛站内搜索

如果你有什么需要的资源可以去悬赏问答发帖,求助社区的网友,我们会在第一时间给你回复哦;资源求档

对于本社区如果你有任何好建议或者相关合作可以随时与我们联系,或者在反馈建议发帖,您的支持,是我们发展的最大动力;投诉建议

投君怀抱里 发表于 2020-4-21 04:55 | 显示全部楼层
很好用,谢谢分享

温馨提示

记得善用社区搜索功能,那里可能会有你想要的资源;论坛站内搜索

如果你有什么需要的资源可以去悬赏问答发帖,求助社区的网友,我们会在第一时间给你回复哦;资源求档

对于本社区如果你有任何好建议或者相关合作可以随时与我们联系,或者在反馈建议发帖,您的支持,是我们发展的最大动力;投诉建议

酱汁儿肉 发表于 2020-4-21 22:52 | 显示全部楼层
很不错,试试看 谢谢分享

温馨提示

记得善用社区搜索功能,那里可能会有你想要的资源;论坛站内搜索

如果你有什么需要的资源可以去悬赏问答发帖,求助社区的网友,我们会在第一时间给你回复哦;资源求档

对于本社区如果你有任何好建议或者相关合作可以随时与我们联系,或者在反馈建议发帖,您的支持,是我们发展的最大动力;投诉建议

爱⌒轻易说出口 发表于 2020-4-25 16:35 | 显示全部楼层
多谢终于找到了

温馨提示

记得善用社区搜索功能,那里可能会有你想要的资源;论坛站内搜索

如果你有什么需要的资源可以去悬赏问答发帖,求助社区的网友,我们会在第一时间给你回复哦;资源求档

对于本社区如果你有任何好建议或者相关合作可以随时与我们联系,或者在反馈建议发帖,您的支持,是我们发展的最大动力;投诉建议

本版积分规则
提醒:禁止复制他人回复等『恶意灌水』行为,违者重罚!

发表新帖
阅读排行更多+
快速回复 收藏帖子 返回列表
即刻加入,享受更多精彩。 会员登录[Login] 注册[Register]
资源分享,资源共享。
官方Facebok
Facebook.com/8ziyuan
意见反馈:[email protected]

关注我们的官方Twitter

Powered by Discuz! © 2016-2024 8ziyuan.com Inc. Protected by CloudFlare | 小黑屋 | 8资源分享论坛 | RSS订阅 | 手机版 | 联系我们