美文网首页
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