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模块。
原图:
素描图:
软件运行界面:
# -*- coding:utf-8 -*-
import cv2
import numpy as np
from tkinter import filedialog, Tk
from os import getcwd
from 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]+
打包后exe蓝奏云下载地址:[url]https://www.lanzoui.com/ib1434d[/url]
备用下载地址
, src_image_name)) # 获取文件名
dst_image_name = 'Sketch_' + image_name
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