python实现图片转素描效果代码
python实现图片转素描效果代码,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | # -*- 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] + $', src_image_name)) # 获取文件名 dst_image_name = 'Sketch_' + image_name rgb_to_sketch(src_image_name) |
千行代码,Bug何处藏。 纵使上线又怎样,朝令改,夕断肠。
分类:
Python开发笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具