造轮子之DIY卡通动漫滤镜制作|项目复盘

643 阅读2分钟

作者:看那个码农

公众号:看那个码农

1.项目简介

爱美之心人人有,想必大家都用手机软件为自己的照片P过图,

本案例就复盘如何利用Python实现照片的卡通滤镜制作

2.项目配置

  • Python3.x
  • Opencv库
  • Numpy库

3.项目流程

1.添加卡通动漫滤镜的函数

项目中最关键的一步是编写用于添加卡通动漫滤镜的函数,

这里我们可以将该函数设置名称为filter(),该函数需要传递两个参数,

  • 第一个参数为输入的图片路径
  • 第二个图片名称

2.利用opencv库进行照片处理

在该函数中,需要利用opencv库的imread()方法读取源图片,并且将其转换为灰度模糊效果,再进行边缘增强,并且调整亮度和对比度,最后将灰度图像转换为彩色,并保存图片,即可实现滤镜的添加

3.项目代码

import cv2
import os
import numpy as np

def filter(filein,picture_name):
    imgI_filename=os.path.join(filein,picture_name)
    
    #目标图片路径
    imgO_filename = os.path.join("E:/photo2/", 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_GRAY2BGR)
    
    #灰度图像转彩色图像
    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__':
    path="E:/photo/"
    imagelist=[]
    for filename in os.listdir(path):
        imagelist.append(filename)
        print(filename)
        filter(path,filename)

4.实验原图

image.png

5.实验结果

image.png

4.项目思考总结

项目是基于Python语言,利用Opencv库和numpy库进行照片的处理,并最终进行输出。从本项目可以学习到一般美图软件的原理,同时通过本项目的案例,可以进行扩展,实现其它滤镜,比如素描滤镜等等。

本项目虽然简单,但是实现了Opencv库对图像的处理操作,一定程度上让Python使用者加深了对Opencv库的了解,为进一步学习Python的其它的库打下了良好的基础。

如果你觉得这篇内容对你有帮助的话:

1、点赞支持下吧,让更多的人也能看到这篇内容

2、关注公众号:看那个码农,我们一起学习一起进步。

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情