Python批量为照片应用卡通动漫滤镜
2021-02-21 本文已影响0人
巴鶴
- Python OpenCv https://www.jianshu.com/nb/49021294
- 游戏App接口从零到实战 https://www.jianshu.com/nb/49125734
- Python办公自动化 https://www.jianshu.com/nb/49019927
引言
卡通动漫滤镜很漂亮,如何把一张照片设计成卡通动漫滤镜呢?可以使用美图秀秀软件,当然也可以自己写代码实现,参考前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) # 为图片应用卡通动漫滤镜