上次的图像处理过去简单了,只需要调用百度API就好了,我这几天一直在想怎么在好好优化。想了半天就决定来到CSDN找找资料。还真有个好玩的文章:阳哥:流弊了!用Python分分钟把微信头像变卡通,油画,素描!的
文章目录- 前言
- 一、使用步骤
- 1.引入库
- 2.使用matplotlib.pyplot绘制图形
- 3.素描方法
- 4.完整代码
- 总结
前言
最近老喜欢去捣鼓python的图像处理,感觉这个就是一个大海,要学习的东西还蛮多的,不过越学越有趣,下面分享学习过程。
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。多的不说了,今天有点晚了,直接上代码。
一、使用步骤 1.引入库代码如下:
import matplotlib.pyplot as plt from PIL import Image, ImageOps, ImageFilter2.使用matplotlib.pyplot绘制图形
代码如下:
def img_show(img, title, inx): """ 创建绘画框 :param img: 图像数据 :param title: 图像标题 :param inx: 图像位于那个子窗口 """ # 创建子图1行3列 绘制子图 ax = plt.subplot(1, 3, inx) # 设置标题 plt.title(title) # 显示图像 if inx > 1: # plt图像为灰度图时会变色 的解决方法 plt.imshow(img, cmap="gray") else: plt.imshow(img) # 不显示x y轴坐标 plt.axis("off")3.素描方法
代码如下:
def sumiao(path, blur=10, alpha=1.0): """ 图像素描 :param path: 图片路径 :param blur: 滤镜次数 :param alpha: 绘制样式 :return: 素描图像 """ # 读取图片并灰度化 try: img = Image.open(path) except: return "图片路径错误" # 添加进绘图框 img_show(img, "原图", 1) img = img.convert("L") # 添加进绘图框 img_show(img, "灰度图", 2) # 复制图片 img_copy = img.copy() # 图像二值反转 (有点吓人 不显示了) img_copy = ImageOps.invert(img_copy) # 图片添加滤镜 for i in range(blur): img_copy = img_copy.filter(ImageFilter.BLUR) # 获取图像宽 高 w, h = img.size for x in range(w): for y in range(h): a = img.getpixel((x, y)) b = img_copy.getpixel((x, y)) # 修改坐标对应的值 img.putpixel((x, y), min(int(a * 255 / (256 - b * alpha)), 255)) # 添加进绘图框 img_show(img, "素描图", 3) # 显示绘画框 plt.show() judge = input("是否保存图片(是或者否):") baocun(path, img, judge)4.完整代码
代码如下:
import matplotlib.pyplot as plt from PIL import Image, ImageOps, ImageFilter def img_show(img, title, inx): """ 创建绘画框 :param img: 图像数据 :param title: 图像标题 :param inx: 图像位于那个子窗口 """ # 创建子图1行3列 绘制子图 ax = plt.subplot(1, 3, inx) # 设置标题 plt.title(title) # 显示图像 if inx > 1: # plt图像为灰度图时会变色 的解决方法 plt.imshow(img, cmap="gray") else: plt.imshow(img) # 不显示x y轴坐标 plt.axis("off") def sumiao(path, blur=10, alpha=1.0): """ 图像素描 :param path: 图片路径 :param blur: 滤镜次数 :param alpha: 绘制样式 :return: 素描图像 """ # 读取图片并灰度化 try: img = Image.open(path) except: return "图片路径错误" # 添加进绘图框 img_show(img, "原图", 1) img = img.convert("L") # 添加进绘图框 img_show(img, "灰度图", 2) # 复制图片 img_copy = img.copy() # 图像二值反转 (有点吓人 不显示了) img_copy = ImageOps.invert(img_copy) # 图片添加滤镜 for i in range(blur): img_copy = img_copy.filter(ImageFilter.BLUR) # 获取图像宽 高 w, h = img.size for x in range(w): for y in range(h): a = img.getpixel((x, y)) b = img_copy.getpixel((x, y)) # 修改坐标对应的值 img.putpixel((x, y), min(int(a * 255 / (256 - b * alpha)), 255)) # 添加进绘图框 img_show(img, "素描图", 3) # 显示绘画框 plt.show() judge = input("是否保存图片(是或者否):") baocun(path, img, judge) def baocun(path, img, judge="否"): # 保存图片 图片位置在原图片位置 if judge == "是": storage = path.split(".") img.save(storage[0] + "1." + storage[1]) if __name__ == '__main__': # 设置Plt窗口的字体为仿宋 plt.rcParams['font.sans-serif'] = ['FangSong'] # 设置Plt窗口的大小 plt.figure(figsize=(6, 4)) # 设置Plt窗口标题 plt.suptitle("图像素描画") path = input("请输入图片根路径:") # 调用素描方法 sumiao(path, alpha=0.99)
天天学习,慢慢进步
总结
我最喜欢的一句话:革命尚未成功,同志仍需努力
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)