• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    利用Python将图片批量转化成素描图的过程记录

    前言

    正常图片转化成素描图片无非对图片像素的处理,矩阵变化而已。目前很多拍照修图App都有这一功能,核心代码不超30行。如下利用 Python 实现读取一张图片并将其转化成素描图片。至于批处理也简单,循环读取文件夹里的图片处理即可。具体代码可以去我的 GitHub 下载。

    程序

    Method 1

    def plot_sketch(origin_picture, out_picture) :
        a = np.asarray(Image.open(origin_picture).convert('L')).astype('float')
        depth = 10.  # (0-100)
        grad = np.gradient(a)  # 取图像灰度的梯度值
        grad_x, grad_y = grad  # 分别取横纵图像梯度值
        grad_x = grad_x * depth / 100.
        grad_y = grad_y * depth / 100.
        A = np.sqrt(grad_x ** 2 + grad_y ** 2 + 1.0)
        uni_x = grad_x / A
        uni_y = grad_y / A
        uni_z = 1. / A
    
        vec_el = np.pi / 2.2  # 光源的俯视角度,弧度值
        vec_az = np.pi / 4.  # 光源的方位角度,弧度值
        dx = np.cos(vec_el) * np.cos(vec_az)  # 光源对x 轴的影响
        dy = np.cos(vec_el) * np.sin(vec_az)  # 光源对y 轴的影响
        dz = np.sin(vec_el)  # 光源对z 轴的影响
    
        b = 255 * (dx * uni_x + dy * uni_y + dz * uni_z)  # 光源归一化
        b = b.clip(0, 255)
    
        im = Image.fromarray(b.astype('uint8'))  # 重构图像
        im.save(out_picture)
        print("转换成功,请查看 : ", out_picture)
    
    

    Method 2

    def plot_sketch2(origin_picture, out_picture, alpha=1.0):
        img = Image.open(origin_picture)
        blur = 20
        img1 = img.convert('L')  # 图片转换成灰色
        img2 = img1.copy()
        img2 = ImageOps.invert(img2)
        for i in range(blur):  # 模糊度
            img2 = img2.filter(ImageFilter.BLUR)
        width, height = img1.size
        for x in range(width):
            for y in range(height):
                a = img1.getpixel((x, y))
                b = img2.getpixel((x, y))
                img1.putpixel((x, y), min(int(a*255/(256-b*alpha)), 255))
        img1.save(out_picture)
    
    

    完整代码

    from PIL import Image, ImageFilter, ImageOps
    import numpy as np
    import os
    
    
    def plot_sketch(origin_picture, out_picture) :
        a = np.asarray(Image.open(origin_picture).convert('L')).astype('float')
        depth = 10.  # (0-100)
        grad = np.gradient(a)  # 取图像灰度的梯度值
        grad_x, grad_y = grad  # 分别取横纵图像梯度值
        grad_x = grad_x * depth / 100.
        grad_y = grad_y * depth / 100.
        A = np.sqrt(grad_x ** 2 + grad_y ** 2 + 1.0)
        uni_x = grad_x / A
        uni_y = grad_y / A
        uni_z = 1. / A
    
        vec_el = np.pi / 2.2  # 光源的俯视角度,弧度值
        vec_az = np.pi / 4.  # 光源的方位角度,弧度值
        dx = np.cos(vec_el) * np.cos(vec_az)  # 光源对x 轴的影响
        dy = np.cos(vec_el) * np.sin(vec_az)  # 光源对y 轴的影响
        dz = np.sin(vec_el)  # 光源对z 轴的影响
    
        b = 255 * (dx * uni_x + dy * uni_y + dz * uni_z)  # 光源归一化
        b = b.clip(0, 255)
    
        im = Image.fromarray(b.astype('uint8'))  # 重构图像
        im.save(out_picture)
        print("转换成功,请查看 : ", out_picture)
    
    
    def plot_sketch2(origin_picture, out_picture, alpha=1.0):
        img = Image.open(origin_picture)
        blur = 20
        img1 = img.convert('L')  # 图片转换成灰色
        img2 = img1.copy()
        img2 = ImageOps.invert(img2)
        for i in range(blur):  # 模糊度
            img2 = img2.filter(ImageFilter.BLUR)
        width, height = img1.size
        for x in range(width):
            for y in range(height):
                a = img1.getpixel((x, y))
                b = img2.getpixel((x, y))
                img1.putpixel((x, y), min(int(a*255/(256-b*alpha)), 255))
        img1.save(out_picture)
    
    
    if __name__ == '__main__':
        origin_picture = "pictures/5.jpg"
        out_picture = "sketchs/sketch.jpg"
        plot_sketch(origin_picture, out_picture)
    
        origin_path = "./pictures"
        out_path = "./sketchs"
        dirs = os.listdir(origin_path)
        for file in dirs:
            origin_picture = origin_path + "/" + file
            out_picture = out_path + "/" + "sketch_of_" + file
            plot_sketch2(origin_picture, out_picture)
    
    
    

    结果








    总结 

    到此这篇关于利用Python将图片批量转化成素描图的文章就介绍到这了,更多相关Python图片批量转素描图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 基于python实现把图片转换成素描
    • python实现图片彩色转化为素描
    • python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
    • python实现图片转换成素描和漫画格式
    • python实现图片素描效果
    • python如何将图片转换素描画
    • Python使用5行代码批量做小姐姐的素描图
    上一篇:python获取全国最新省市区数据并存入表实例代码
    下一篇:Python Tornado框架轻松写一个Web应用的全过程
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    利用Python将图片批量转化成素描图的过程记录 利用,Python,将,图片,批量,