分享使用python+OpenCV将图片转换成素描图,使用工具python3.6,opencv-python3.4.9.31。参考文章:http://www.askaswiss.com/2016/01/how-to-create-pencil-sketch-opencv-python.html
通过四个简单步骤将RGB彩色图像转换为铅笔素描: 1、将RGB彩色图像转换为灰度。
2、反转灰度图像得到负值。
3、将高斯模糊应用于步骤2中的负片。
4、使用彩色减淡功能将步骤1的灰度图像与步骤3的模糊负片混合
源码:
import cv2
from tkinter import filedialog, Tk
from os import getcwd
def select_img():
# 选择图片
root = Tk()
root.withdraw()
img_path = filedialog.askopenfilename(title='选择图片文件', filetypes=[('All Files', '*')])
return img_path
def 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 convert_to_sketch(img_path):
img_rgb = cv2.imread(img_path)
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)
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)
try:
# 获取原文件名,得到新文件名
img_names = str(img_path).split('/')
img_name = 'sketch_' + img_names[len(img_names) - 1]
try:
cv2.namedWindow(img_name, cv2.WINDOW_NORMAL)
cv2.imshow(img_name, img_blend)
cv2.waitKey(0)
cv2.imwrite(img_name, img_blend)
save_path = getcwd() + "\\" + img_name # 保存路径
print('素描图片生成成功!')
print('保存路径:' + save_path)
except Exception as e:
print('素描图片生成失败!')
print(e)
except Exception as e:
print('获取文件名失败!')
print(e)
if __name__ == '__main__':
print('选择图片(路径不要含中文):')
src_image = select_img()
print(src_image)
convert_to_sketch(src_image)
© 版权声明
THE END
- 最新
- 最热
只看作者