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

2021-02-21  本文已影响0人  巴鶴

引言

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


蛋糕1.png
蛋糕2.png

思路分析

代码参考

# -*- 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) # 为图片应用卡通动漫滤镜
上一篇下一篇

猜你喜欢

热点阅读