美文网首页
Python批量为照片应用卡通动漫滤镜

Python批量为照片应用卡通动漫滤镜

作者: 巴鶴 | 来源:发表于2021-02-21 14:18 被阅读0次

    引言

    卡通动漫滤镜很漂亮,如何把一张照片设计成卡通动漫滤镜呢?可以使用美图秀秀软件,当然也可以自己写代码实现,参考前2篇分享继续使用OpenCV模块实现批量为照片添加卡通动漫滤镜。同样新手设计为了安全起见,先把原照片放入一个目录,然后再指定一个目标路径(即转换后的图片保存路径,这样可以防止源文件被破坏)。运行程序,生成效果图如下所示。


    蛋糕1.png
    蛋糕2.png

    思路分析

    • 导入本实例所需的模块,这里为OpenCV-Python 和OS 模块。其中,OS 模块是为了获取指定路径下的文件而导入的。
    • 添加卡通动漫滤镜的方法,名称为filter(),该方法需要传递两个参数,第一个参数用于指定图片路径,第二个参数用于指定图片名称。在该方法中,首先将源文件路径和文件名拼接为源文件的绝对路径,并且生成目标文件路径,imread() 方法读取源图片,并且将其转换为灰度模糊效果,再进行边缘增强,并且调整亮度和对比度,最后将灰度图像转换为彩色,并保存图片。
    • 通过for 循环读取指定路径下的全部图片文件,再调用filter() 方法为图片应用卡通动漫滤镜。

    代码参考

    # -*- coding: utf-8 -*-
    """
    @Time : 2021/2/21 13:07
    @Auth : Yvon~早安阳光
    @File :dongmanlvj
    """
    # 导入OpenCV-Python模块、导入文件与系统模块
    import cv2,os
    
    def filter(filein,picture_name):
        imgI_filename = os.path.join(filein,picture_name) # 源文件路径
        imgO_filename = os.path.join(r'new', picture_name) # 目标文件路径
        img_rgb = cv2.imread(imgI_filename) # 读取图片
        img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2GRAY) # 转换为灰度
        img_blur = cv2.medianBlur(img_gray, 5) # 增加模糊效果。值越大越模糊(取奇数)
        # 检测到边缘并且增强其效果
        img_edge = cv2.adaptiveThreshold(img_blur, 128,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,blockSize=9,C=8)
        img_edge = cv2.cvtColor(img_edge, cv2.COLOR_GRAY2RGB)  # 彩色图像转为灰度图像
        img_cartoon = cv2.bitwise_and(img_rgb, img_edge)  # 灰度图像转为彩色图像
        res = np.uint8(np.clip((2.0 * img_cartoon + 16), 0, 255))  # 调整亮度和对比度
        cv2.imwrite(imgO_filename, res)  # 保存转换后的图片
    
    if __name__ == '__main__':
        imagelist = [] # 创建空列表
        # 循环读取指定路径下的文件名
        for filename in os.listdir(r'old/'):
            imagelist.append(filename) # 将文件名添加到imagelist
            print(filename)
            filter(r'old',filename) # 为图片应用卡通动漫滤镜
    

    相关文章

      网友评论

          本文标题:Python批量为照片应用卡通动漫滤镜

          本文链接:https://www.haomeiwen.com/subject/blnffltx.html