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

news2025/5/25 18:11:58

本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴

前言

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

使用CodeBuddy完成图片的素描化

我们打开vscode进入到拓展中直接搜索CodeBuddy,点击安装这个插件就行了
image.png
我们点击左侧的插件图标就能进行使用了
还是老样子先生成README文件
对ai说:

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

image.png
然后直接到Craft艾特这个文件进行直接开发,代码生成很快
image.png
代码生成好了之后我们直接运行程序,在终端输入命令python code.py
让我们选择一个图片并且文件的路径必须得是英文路径,不能包含中文
image.png
然后他就生成出了一张素描画,我们可以和原照片对比下,效果还是挺不错的,我这里的代码配置参数直接就是默认的,你们也可以进行设置的
35a6b50c3ad9fe58d8a52c2fca0a9e84.jpg

相关代码如下:

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,相信它会给你带来惊喜!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2385511.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3.8.2 利用RDD计算总分与平均分

在本次实战中&#xff0c;我们利用Spark的RDD完成了成绩文件的总分与平均分计算任务。首先&#xff0c;准备了包含学生成绩的文件并上传至HDFS。接着&#xff0c;通过交互式方式逐步实现了成绩的读取、解析、总分计算与平均分计算&#xff0c;并最终输出结果。此外&#xff0c;…

29-FreeRTOS事件标志组

一、概述 事件是一种实现任务间通信的机制&#xff0c;主要用于实现多任务间的同步&#xff0c;但事件通信只能是事件类型的通信&#xff0c;无数据传输。与信号量不同的是&#xff0c;它可以实现一对多&#xff0c;多对多的同步。 即一个任务可以等待多个事件的发生&#xff1…

「EMD/EEMD/VMD 信号分解方法 ——ECG信号处理-第十四课」2025年5月23日

一、引言 上一节&#xff0c;我们介绍了希尔伯特黄变换&#xff08;HHT&#xff09;及其经验模态分解&#xff08;EMD&#xff09;的相关内容&#xff0c;这一节&#xff0c;我们继续拓展EMD分解技术&#xff0c;补充介绍集合经验模态分解&#xff08;Ensemble Empirical Mode …

二叉树层序遍历6

INT_MIN的用法&#xff1a; INT_MIN是C/C 中的一个宏常量 &#xff0c;在 <limits.h> &#xff08;C 中也可使用 <climits> &#xff09;头文件中定义&#xff0c;代表 int 类型能表示的最小整数值 。其用法主要体现在以下方面&#xff1a; 1.初始化变量 …

【论文精读】2023 AAAI--FastRealVSR现实世界视频超分辨率(RealWorld VSR)

文章目录 一、摘要二、Method2.1 现象&#xff08;问题&#xff09;--对应文中隐状态的分析&#xff08;Analysis of Hidden State&#xff09;2.2 怎么解决 --对应文中Framework2.2.1 整体流程&#xff1a;2.2.2 HSA模块怎么工作&#xff1f;2.2.2.1 隐藏状态池2.2.2.2 选择性…

IPython 常用魔法命令

文章目录 IPython 魔法命令&#xff08;Magic Commands&#xff09;一、系统与文件操作1. %ls2. %cd​​和%pwd3. %%writefile​​4. %run 二、性能分析与计时1. %timeit2. %prun​​3. ​​%%timeit 三、代码处理与交互1. %load2. ​​%edit3. ​​%store 四、调试与诊断2. ​…

Java虚拟机 - 程序计数器和虚拟机栈

运行时数据结构 Java运行时数据区程序计数器为什么需要程序计数器执行流程虚拟机栈虚拟机栈作用虚拟机栈核心结构运行机制 Java运行时数据区 首先介绍Java运行时数据之前&#xff0c;我们要了解&#xff0c;对于计算机来说&#xff0c;内存是非常重要的资源&#xff0c;因为内…

新能源汽车产业链图谱分析

1. 产业定义 新能源汽车是指采用非常规的车用燃料作为动力来源&#xff0c;综合车辆的动力控制和驱动方面的先进技术&#xff0c;形成的具有新技术、新结构、技术原理先进的汽车。 新能源车包括四大类型&#xff1a;混合动力电动汽车&#xff08;HEV&#xff09;、纯电动汽车…

如何在PyCharm2025中设置conda的多个Python版本

前言 体验的最新版本的PyCharm(Community)2025.1.1&#xff0c;发现和以前的版本有所不同。特别是使用Anaconda中的多个版本的Python的时候。 关于基于Anaconda中多个Python版本的使用&#xff0c;以及对应的Pycharm&#xff08;2023版&#xff09;的使用&#xff0c;可以参考…

maven快速上手

之前我们项目如果要用到其他额外的jar包&#xff0c;需要自己去官网下载并且导入。但是有maven后&#xff0c;直接在maven的pom.xml文件里用代码配置即可&#xff0c;配置好后maven会自动帮我们联网下载并且会自动导入该jar包 在右边的maven中&#xff0c;我们可以看到下载安装…

cplex12.9 安装教程以及下载

cplex 感觉不是很好找&#xff0c;尤其是教育版&#xff0c;我这里提供一个版本&#xff0c;在下面的图可以看到&#xff0c;不仅可以配置matlab&#xff0c;也可以配置vs,现在拿vs2017来测试一下&#xff0c;具体文件的文件有需要的可以复制下面的链接获取 我用网盘分享了「c…

甘特图实例 dhtmlxGantt.js

本文介绍了如何使用dhtmlxGantt库创建一个基础的甘特图示例&#xff0c;并对其进行汉化和自定义配置。首先&#xff0c;通过引入dhtmlxgantt.css和dhtmlxgantt.js文件初始化甘特图。接着&#xff0c;通过设置gantt.i18n.setLocale("cn")实现核心文本的汉化&#xff0…

视频剪辑 VEGAS - 配置视频片段保持原长宽比

VEGAS 配置视频片段保持原长宽比 右击视频片段 -> 选择【开关】 -> 勾选【保持长宽比】 右击视频片段 -> 点击【属性】 -> 弹出【属性】窗口 点击【媒体】 -> 选择【像素宽高比】为【1,0000&#xff08;方形&#xff09;】

力扣 54 .螺旋矩阵

文章目录 题目介绍题解 题目介绍 题解 代码如下&#xff1a; class Solution {public List<Integer> spiralOrder(int[][] matrix) {List<Integer> res new ArrayList<>();if (matrix.length 0){return res;}int l 0, r matrix[0].length - 1, t 0, b…

四、【API 开发篇 (上)】:使用 Django REST Framework 构建项目与模块 CRUD API

【API 开发篇 】&#xff1a;使用 Django REST Framework 构建项目与模块 CRUD API 前言为什么选择 Django REST Framework (DRF)&#xff1f;第一步&#xff1a;创建 Serializers (序列化器)第二步&#xff1a;创建 ViewSets (视图集)第三步&#xff1a;配置 URLs (路由)第四步…

ARM笔记-ARM伪指令及编程基础

第四章 ARM伪指令及编程基础 4.1 伪指令概述 4.1.1 伪指令定义 人们设计了一些专门用于指导汇编器进行汇编工作的指令&#xff0c;由于这些指令不形成机器码指令&#xff0c;它们只是在汇编器进行汇编工作的过程中起作用&#xff0c;所以被叫做伪指令。 4.1.2 伪指令特征 …

Python入门手册:Python基础语法

Python是一种简洁、易读且功能强大的编程语言&#xff0c;非常适合初学者入门。无论你是编程新手&#xff0c;还是有一定编程基础但想学习Python的开发者&#xff0c;掌握Python的基础语法都是迈向高效编程的第一步。本文将详细介绍Python的基本语法&#xff0c;包括变量和数据…

CAD如何导出PDF?PDF如何转CAD?详细教程来了

浩辰CAD看图王是一款功能强大的CAD图纸查看与编辑工具&#xff0c;其核心功能之一便是支持CAD与PDF格式的互转。下面是CAD看图王输出PDF和PDF转CAD功能的详细介绍及操作步骤&#xff1a; 一、输出PDF功能 看图王可以将CAD图纸转换为PDF格式&#xff0c;是文件在不同的设备上显…

python-数据可视化(大数据、数据分析、可视化图像、HTML页面)

通过 Python 读取 XLS 、CSV文件中的数据&#xff0c;对数据进行处理&#xff0c;然后生成包含柱状图、扇形图和折线图的 HTML 报告。这个方案使用了 pandas 处理数据&#xff0c;matplotlib 生成图表&#xff0c;并将图表嵌入到 HTML 页面中。 1.XSL文件生成可视化图像、生成h…

【笔记】OpenCV的学习(未完)

由于只记关键和不懂的部分 希望做到下次再看这部分笔记就记得 所以用词会非常简练 前向传播 输入数据依次经过模型的各层&#xff0c;按照各层定义的运算规则进行计算&#xff0c;最终得到模型预测输出的过程。 单向的信息流动&#xff0c;不涉及模型参数的更新。 助于思考的…