使用python+OpenCV将图片转换成素描

分享使用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
喜欢就支持一下吧
点赞11 分享
评论 共2条

请登录后发表评论