作者:看那个码农
公众号:看那个码农
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.实验原图
5.实验结果
4.项目思考总结
项目是基于Python语言,利用Opencv库和numpy库进行照片的处理,并最终进行输出。从本项目可以学习到一般美图软件的原理,同时通过本项目的案例,可以进行扩展,实现其它滤镜,比如素描滤镜等等。
本项目虽然简单,但是实现了Opencv库对图像的处理操作,一定程度上让Python使用者加深了对Opencv库的了解,为进一步学习Python的其它的库打下了良好的基础。
如果你觉得这篇内容对你有帮助的话:
1、点赞支持下吧,让更多的人也能看到这篇内容
2、关注公众号:看那个码农,我们一起学习一起进步。
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情