当前位置: 首页>编程语言>正文

将图像转化为字节流python python 将图片转换成像素画

上次的图像处理过去简单了,只需要调用百度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)

天天学习,慢慢进步


总结

我最喜欢的一句话:革命尚未成功,同志仍需努力


https://www.xamrdz.com/lan/5g51938571.html

相关文章: