当前位置:首页>python>用Python OpenCV 一键把照片变成手绘素描,效果绝了!

用Python OpenCV 一键把照片变成手绘素描,效果绝了!

  • 2026-10-10 19:28:27
用Python OpenCV 一键把照片变成手绘素描,效果绝了!
你有没有想过,手机里的照片也能变成像大师手绘的素描稿?今天我就来分享一段超实用的 Python 代码,用 OpenCV 库就能批量把任意图片转换成超有质感的素描图,而且完全免费!

先看效果,是不是很惊艳?

话不多说,先上几张我用这段代码生成的效果对比图,你就知道有多香了:

人物写真篇

原图是精致的写真照,经过处理后,人物的轮廓、发丝和衣物纹理都清晰地保留了下来,瞬间有了艺术感。

日常自拍篇

即使是普通的自拍,也能秒变文艺范儿的素描头像,用来当头像或者发朋友圈,绝对吸睛。

物品静物篇

不只是人像,像自行车这样的静物也能完美转换,金属的光泽和轮胎的纹理都被精准地勾勒出来。


核心原理:像画家一样 “画” 素描

这个效果的实现,其实是模拟了画家创作素描的过程,主要分为以下几步:

  1. 去色处理:首先将彩色照片转换为灰度图,这就像画家先用铅笔在纸上铺一层底色。
  2. 反相处理:将灰度图的颜色反转,得到类似照片底片的效果,这一步是为了突出图像的边缘和纹理。
  3. 高斯模糊:对反相后的图像进行模糊处理,这就像画家在纸上轻轻晕染,让线条过渡更自然。
  4. 颜色减淡混合:最后,将原始灰度图和模糊后的反相图进行 “颜色减淡” 混合,最终得到我们看到的素描效果。

代码实现:直接拿走就能用

我已经把完整的代码写好了,你只需要复制到本地就能运行,亲测有效!

# encoding=utf8'''Python-opencv批量将任意图片转化为素描图'''# 导入包import cv2import numpy as npimport os# 定义方法def dodgeNaive(image, mask):# 确定输入图像的形状	width, height = image.shape[:2]# 准备与图像大小相同的输出参数	blend = np.zeros((width, height), np.uint8)for col in range(width):for row in range(height):# 对每个像素执行此操作if mask[col, row] == 255:# 避免被零除				blend[col, row] = 255else:# 将图像像素值移位8位# 除以掩模的倒数				tmp = (image[col, row] << 8) / (255 - mask)# print('tmp={}'.format(tmp.shape)) # 调试代码# 确保结果值保持在范围内if tmp.any() > 255:					tmp = 255					blend[col, row] = tmpreturn blenddef dodgeV2(image, mask):return cv2.divide(image, 255 - mask, scale=256)def burnV2(image, mask):return 255 - cv2.divide(255 - image, 255 - mask, scale=256)def rgb_to_sketch(src_image_name, dst_image_name):	img_rgb = cv2.imread(src_image_name)	img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)# 读取图片时直接转换操作# img_gray = cv2.imread('example.jpg', cv2.IMREAD_GRAYSCALE)	img_gray_inv = 255 - img_gray	img_blur = cv2.GaussianBlur(img_gray_inv, ksize=(21, 21),	                            sigmaX=0, sigmaY=0)	img_blend = dodgeV2(img_gray, img_blur)# cv2.imshow('original', img_rgb) # 调试转换1# cv2.imshow('gray', img_gray) # 调试转换2# cv2.imshow('gray_inv', img_gray_inv) # 调试转换3# cv2.imshow('gray_blur', img_blur) # 调试转换4# cv2.imshow("pencil sketch", img_blend) # 调试转换5	cv2.waitKey(0)	cv2.destroyAllWindows()	cv2.imwrite(dst_image_name, img_blend)def imageSketch(imagepath, squarepath):'''读取图片并进行批量素描图转换'''	files = os.listdir(imagepath) # 读取指定目录中的所有文件for f in files:		file_p =  os.path.join(imagepath, f) # 图片原始位置		squar_p = os.path.join(squarepath, f) # 素描图保存位置if not os.path.exists(squarepath): 			os.mkdir(squarepath) # 如果目不存在就创建		rgb_to_sketch(file_p, squar_p)print(file_p, '==>' ,squar_p)if __name__ == '__main__':# 存放待处理图片的目录	imagepath = r'D:\Test\image'# 图片处理结果保存目录	squarepath = r'D:\Test\square'# 执行方法	imageSketch(imagepath, squarepath)# src_image_name = r'D:\Test\image\24e4 (1).jpeg'# dst_image_name = r'D:\Test\square\24e4 (1).jpeg'# rgb_to_sketch(src_image_name, dst_image_name)

手把手教你跑起来

  1. 准备工作

    • 把上面的代码复制到一个新的文本文件中,保存为 sketch.py,建议放在 C 盘根目录下方便查找。
    • 安装所需的 Python 模块,打开命令行输入:
      pip install numpypip install opencv-python
  2. 修改路径

    • 在代码的最后部分,找到 imagepath 和 squarepath 这两个变量。
    • 将 imagepath 修改为你存放待处理图片的文件夹路径。
    • 将 squarepath 修改为你希望保存素描图的文件夹路径。
  3. 运行代码

    • 按下 Win + R,输入 cmd 打开命令行。
    • 切换到 sketch.py 所在的目录,例如:cd C:\
    • 输入 python sketch.py 并回车,程序就会自动批量处理图片了!

这个小工具不仅能给你的照片增添艺术感,还能批量处理,非常适合用来整理相册或者制作独特的社交媒体内容。代码已经为你准备好了,赶紧去试试吧,看看你的照片能变成什么样的素描大作!

如果你也想学习python,这些Python资料、数据分析、Python从入门到实践第三版pdf书籍、Python+Pycharm安装包&永久激活插件、直播课程,可以在这里免费领取哈👇

这可能是史上最贵的一行代码: 价值16亿!

【2026】超详细Python下载安装+PyCharm下载安装教程,一键安装,永久使用!!新手小白必备!!

这个笔记简直是新手入门python的宝藏

最新文章

随机文章