CodeBuddy 实现图片转素描手绘工具

举报
Undoom 发表于 2025/05/25 13:40:13 2025/05/25
【摘要】 前言最近在社交媒体上,各种素描风格的图片火得一塌糊涂,身边不少朋友都在分享自己的 “素描照”,看着那些黑白线条勾勒出的独特韵味,我心里直痒痒,特别想自己动手试试,把喜欢的彩色图片变成黑白素描手绘风格。在网上找了不少在线工具,要么功能有限,要么画质差强人意,我就琢磨着能不能在本地实现这个功能,毕竟自己动手,不仅能按需调整效果,还更有成就感。一番研究后,我发现使用 Python 的 opencv...

前言

最近在社交媒体上,各种素描风格的图片火得一塌糊涂,身边不少朋友都在分享自己的 “素描照”,看着那些黑白线条勾勒出的独特韵味,我心里直痒痒,特别想自己动手试试,把喜欢的彩色图片变成黑白素描手绘风格。在网上找了不少在线工具,要么功能有限,要么画质差强人意,我就琢磨着能不能在本地实现这个功能,毕竟自己动手,不仅能按需调整效果,还更有成就感。
一番研究后,我发现使用 Python 的 opencv 模块就可以实现图片转素描的功能,可我虽然对 Python 有一定了解,但真要从零开始写代码,还是有点害怕了。就在这时,CodeBuddy 进入了我的视线。CodeBuddy 拥有强大的代码智能补全和实时语法检查功能,对于我这种偶尔会粗心犯错的人来说,简直太友好了,能及时发现并纠正代码中的错误,大大提高了开发效率。而且它还支持多种编程语言和框架,和 opencv 模块搭配使用毫无压力,还能提供很多相关的代码示例和优化建议,让我在开发过程中少走了很多弯路。

使用CodeBuddy完成图片的素描化

我们打开vscode进入到拓展中直接搜索CodeBuddy,点击安装这个插件就行了

我们点击左侧的插件图标就能进行使用了
还是老样子先生成README文件
对ai说:

我想实现图片转素描手绘工具,本工具主要使用python的opencv模块编写,将彩色图片转成黑白素描手绘图,你帮我生成下README文件


然后直接到Craft艾特这个文件进行直接开发,代码生成很快

代码生成好了之后我们直接运行程序,在终端输入命令
python code.py
让我们选择一个图片并且文件的路径必须得是英文路径,不能包含中文

然后他就生成出了一张素描画,我们可以和原照片对比下,效果还是挺不错的,我这里的代码配置参数直接就是默认的,你们也可以进行设置的

相关代码如下:

import cv2

import numpy as np

from tkinter import filedialog, Tk

from os import getcwd

from re import findall

def open_path():

    # 图片路径

    root = Tk()

    root.withdraw()

    file_path = (filedialog.askopenfilename(title='选择图片文件', filetypes=[('All Files', '*')]))

    return file_path

def dodgeNaive(image, mask):

    # determine the shape of the input image

    width, height = image.shape[:2]

    # prepare output argument with same size as image

    blend = np.zeros((width, height), np.uint8)

    for col in range(width):

        for row in range(height):

            # do for every pixel

            if mask[col, row] == 255:

                # avoid division by zero

                blend[col, row] = 255

            else:

                # shift image pixel value by 8 bits

                # divide by the inverse of the mask

                tmp = (image[col, row] << 8) / (255 - mask)

                # print('tmp={}'.format(tmp.shape))

                # make sure resulting value stays within bounds

                if tmp.any() > 255:

                    tmp = 255

                    blend[col, row] = tmp

    return blend

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 rgb_to_sketch(src_image_name):

    print('转换中......')

    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)

    # cv2.imshow('gray', img_gray)

    # cv2.imshow('gray_inv', img_gray_inv)

    # cv2.imshow('gray_blur', img_blur)

    cv2.imwrite(dst_image_name, img_blend)

    save_path = getcwd() + "\\" + dst_image_name  # 保存路径

    print('转换完成!!!\n')

    print('保存路径:' + save_path)

    cv2.imshow(save_path, img_blend)

    cv2.waitKey(0)

    cv2.destroyAllWindows()

if __name__ == '__main__':

    print('请选择图片(路径不要含中文):')

    src_image_name = open_path()  # 文件路径

    print(src_image_name+'\n')

    image_name = ''.join(findall(r'[^\\/:*?"<>|\r\n]+$', src_image_name))  # 获取文件名

    dst_image_name = 'Sketch_' + image_name

    rgb_to_sketch(src_image_name)


感兴趣的可以去学习下哦

总结

总的来说,这次使用 CodeBuddy 实现图片转素描手绘工具的体验非常棒。它不仅帮我实现了一直想尝试的功能,还让我在开发过程中学习到了很多新知识和技巧。如果你也和我一样,对编程实现有趣的功能感兴趣,又担心自己搞不定复杂的代码,不妨试试 CodeBuddy,相信它会给你带来惊喜!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。