按顺序:
处理后的图片
待处理图片
源文件
下面是代码:
import os
import cv2
def cartoonise(picture_name,image_path):
"""图片处理部分"""
cartoon_image_name = "cartoon_" + picture_name
num_bilateral = 7 # 定义双边滤波的数目
img_rgb = cv2.imread(image_path+picture_name) # 读取图片 cv2.imread('文件路径')
# 用高斯金字塔降低取样 (img_rgb还要再使用,所以使用变量复制一下)
img_color = img_rgb
# 重复使用小的双边滤波代替一个大的滤波
for _ in range(num_bilateral): # 双边滤波 ( _ 变量(
img_color = cv2.bilateralFilter(img_color,d=9,sigmaColor=9,sigmaSpace=7)
#转换为灰度并且使其产生中等的模糊
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2GRAY)
img_blur = cv2.medianBlur(img_gray, 7)
#检测到边缘并且增强其效果
img_edge = cv2.adaptiveThreshold(img_blur,255,
cv2.ADAPTIVE_THRESH_MEAN_C,
cv2.THRESH_BINARY,
blockSize=9,
C=2)
#转换回彩色图像
img_edge = cv2.cvtColor(img_edge, cv2.COLOR_GRAY2RGB)
img_cartoon = cv2.bitwise_and(img_color, img_edge)
# 保存转换后的图片 cv2.imwrite(文件名称,文件)
cv2.imwrite("cartoon_image/"+cartoon_image_name, img_cartoon)
def Batch_execution():
"""批量执行"""
Original_image_names= os.listdir('image')
print(f'一共有{len(Original_image_names)}张图片')
for num in range(len(Original_image_names)):
print(f'正在处理第{num+1}张图片:{Original_image_names[num].split(".")[0]}')
cartoonise(Original_image_names[num],"image/") # (图片名,图片路径)
print('处理完成')
# print(num)
Batch_execution()
对比图


![[python ][opencv][图片卡通化] [python ][opencv][图片卡通化]](http://www.mshxw.com/aiimages/31/445156.png)
