8资源分享论坛 - 资源分享,资源共享|www.8ziyuan.com

标题: 使用python将图片转素描 by_ 逸少凌仙 [打印本页]

作者: 唐章小小    时间: 2020-4-8 18:36
标题: 使用python将图片转素描 by_ 逸少凌仙
本工具使用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. , src_image_name))  # 获取文件名
  67.     dst_image_name = 'Sketch_' + image_name
  68.     rgb_to_sketch(src_image_name)
复制代码


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


备用下载地址




作者: 为爱搁浅心脏    时间: 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
多谢终于找到了
作者: kuge20101    时间: 2020-4-26 18:27
谢谢分享太赞了
作者: 脆弱让人放纵    时间: 2020-4-28 12:53
感谢你的分享啊
作者: 失心疯╰╮    时间: 2020-4-30 10:34
谢谢分享,前来试试
作者: 让痛无所    时间: 2020-5-1 10:23
666多谢分享好软件
作者: 木兮木    时间: 2020-5-1 14:21
感谢分享,谢谢。
作者: ywmmso    时间: 2020-5-1 18:59
感谢分享,谢谢。
作者: tangqingfuk    时间: 2020-5-2 12:47
很不错,试试看 谢谢分享
作者: 满栀    时间: 2020-5-2 18:43
论坛有你更精彩
作者: 竹排江中游    时间: 2020-5-5 13:09
谢谢啦,试试看
作者: 温入骨    时间: 2020-5-5 14:32
好东西谢谢楼主分享
作者: shakayxa    时间: 2020-5-6 13:45
支持一下,谢谢分享了~
作者: mypwjcymn    时间: 2020-5-7 21:38
谢谢楼主分享
作者: 〃獨白式分手    时间: 2020-5-8 17:02
好东西谢谢楼主分享
作者: xhao4yu    时间: 2020-5-8 18:17
回帖一下以示尊敬




欢迎光临 8资源分享论坛 - 资源分享,资源共享|www.8ziyuan.com (https://www.8ziyuan.com/) Powered by Discuz! X3.4