源码地址:
使用OpenCV-Python批量为照片应用卡通动漫滤镜资源-CSDN文库
这段代码实现了一个图片处理功能,将指定文件夹中的图片转换为卡通动漫风格,并保存到另一个文件夹中。以下是代码的详细解析和功能说明:
1. 功能概述
-
读取图片:从指定路径读取图片。
-
应用卡通动漫滤镜:通过一系列图像处理步骤,将图片转换为卡通动漫风格。
-
保存结果:将处理后的图片保存到指定路径。
2. 代码详细解析
导入模块
import cv2
import os
import numpy as np
-
cv2:OpenCV库,用于图像处理。 -
os:操作系统模块,用于文件路径操作。 -
numpy:数值计算库,用于数组操作。
定义滤镜函数
def filter(filein, picture_name):
imgI_filename = os.path.join(filein, picture_name) # 源文件路径
imgO_filename = os.path.join(r'out', picture_name) # 目标文件路径
img_rgb = cv2.imread(imgI_filename) # 读取图片
-
定义一个函数
filter,用于处理单张图片。 -
使用
os.path.join构造源文件和目标文件的路径。 -
使用
cv2.imread读取图片。
图像处理步骤
# 转换为灰度并且使其产生中等的模糊
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) # 彩色图像转为灰度图像
-
使用自适应阈值算法进行边缘检测,增强边缘效果。
-
将边缘检测后的灰度图转换为RGB格式,以便与原图合成。
合成卡通效果
img_cartoon = cv2.bitwise_and(img_rgb, img_edge) # 灰度图像转为彩色图像
-
使用位运算
cv2.bitwise_and将原图与边缘检测后的图像合成,生成卡通效果。
调整亮度和对比度
# 调整亮度和对比度
res = np.uint8(np.clip((2.0 * img_cartoon + 16), 0, 255))
-
使用
np.clip和np.uint8调整亮度和对比度,增强图片的视觉效果。
保存结果
# 保存转换后的图片
cv2.imwrite(imgO_filename, res)
-
使用
cv2.imwrite将处理后的图片保存到目标路径。
主程序
if __name__ == '__main__':
imagelist = [] # 创建空列表
for filename in os.listdir(r'in/'):
imagelist.append(filename) # 将文件名添加到imagelist
print(filename)
filter(r'in', filename) # 为图片应用卡通动漫滤镜
-
遍历指定文件夹
in/中的所有文件。 -
对每个文件调用
filter函数,应用卡通动漫滤镜并保存结果。
3. 运行效果
-
程序启动时,读取指定文件夹
in/中的所有图片。 -
对每张图片应用卡通动漫滤镜,处理后的图片保存到
out/文件夹中。 -
处理后的图片具有卡通动漫风格,边缘清晰,颜色平滑。
4. 注意点
-
文件路径:确保
in/文件夹存在且包含图片,out/文件夹也存在。 -
文件格式:确保处理的图片格式支持(如PNG、JPEG等)。
-
OpenCV安装:确保已正确安装OpenCV库。
-
性能问题:图像处理可能需要一定时间,特别是对于高分辨率图片。
762

被折叠的 条评论
为什么被折叠?



