上次的图像处理过去简单了,只需要调用百度API就好了,我这几天一直在想怎么在好好优化。
文章目录
- 前言
- 一、使用步骤
- 1.引入库
- 2.使用matplotlib.pyplot绘制图形
- 3.素描方法
- 4.完整代码
- 总结
前言
最近老喜欢去捣鼓python的图像处理,感觉这个就是一个大海,要学习的东西还蛮多的,不过越学越有趣,下面分享学习过程。
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。多的不说了,今天有点晚了,直接上代码。
一、使用步骤
1.引入库
代码如下:
import matplotlib.pyplot as plt
from PIL import Image, ImageOps, ImageFilter
2.使用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)
天天学习,慢慢进步
总结
我最喜欢的一句话:革命尚未成功,同志仍需努力