CodeBuddy 實現圖片轉素描手繪工具

本文所使用的 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 cv2import numpy as npfrom tkinter import filedialog, Tkfrom os import getcwdfrom re import findalldef open_path():# 圖片路徑root = Tk()root.withdraw()file_path = (filedialog.askopenfilename(title='選擇圖片文件', filetypes=[('All Files', '*')]))return file_pathdef dodgeNaive(image, mask):# determine the shape of the input imagewidth, height = image.shape[:2]# prepare output argument with same size as imageblend = np.zeros((width, height), np.uint8)for col in range(width):for row in range(height):# do for every pixelif mask[col, row] == 255:# avoid division by zeroblend[col, row] = 255else:# shift image pixel value by 8 bits# divide by the inverse of the masktmp = (image[col, row] << 8) / (255 - mask)# print('tmp={}'.format(tmp.shape))# make sure resulting value stays within boundsif tmp.any() > 255:tmp = 255blend[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):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_grayimg_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_namergb_to_sketch(src_image_name)

感興趣的可以去學習下哦

總結

總的來說,這次使用 CodeBuddy 實現圖片轉素描手繪工具的體驗非常棒。它不僅幫我實現了一直想嘗試的功能,還讓我在開發過程中學習到了很多新知識和技巧。如果你也和我一樣,對編程實現有趣的功能感興趣,又擔心自己搞不定復雜的代碼,不妨試試 CodeBuddy,相信它會給你帶來驚喜!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/84329.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84329.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/84329.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025.05.21華為暑期實習機考真題解析第二題

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? 筆試突圍OJ 02. 災區物資調度路徑規劃 問題描述 在一次嚴重的自然災害后,LYA負責協調救援物資的配送工作。救援區域包含多個受災鄉鎮和一個物資集結點,各個地點之間的道路狀況各異,有些甚至…

Gartner《Optimize GenAI Strategy for 4 Key ConsumerMindsets》學習心得

一、引言 在當今數字化營銷浪潮中,生成式人工智能(GenAI)正以前所未有的速度重塑著市場格局。GenAI 既是一場充滿機遇的變革,也是一場潛在風險的挑戰。一方面,絕大多數 B2C 營銷領導者對 GenAI 賦能營銷抱有極高期待,他們看到了 GenAI 在提升時間與成本效率方面的巨大潛…

探索鏈表的奇妙世界:從基礎到高級應用

鏈表是計算機科學中一種基礎且重要的數據結構&#xff0c;它如同一條由珠子串成的項鏈&#xff0c;每個珠子&#xff08;節點&#xff09;都包含著數據和指向下一個珠子的線索。 與數組相比&#xff0c;鏈表在插入和刪除操作上更加靈活&#xff0c;無需預先分配固定大小的內存…

黑馬點評雙攔截器和Threadlocal實現原理

文章目錄 雙攔截器ThreadLocal實現原理 雙攔截器 實現登錄狀態刷新的原因&#xff1a; ? 防止用戶會話過期&#xff1a;通過動態刷新Token有效期&#xff0c;確保活躍用戶不會因固定過期時間而被強制登出 ? 提升用戶體驗&#xff1a;用戶無需頻繁重新登錄&#xff0c;只要…

Windows 中動態庫.dll 的 .lib 文件有什么作用?

在 Windows 平臺開發中, 動態鏈接庫(Dynamic Link Library, DLL)。與之相關的還有一個常讓人困惑的文件——.lib 文件。那么,這個 .lib 文件到底有什么作用呢? 一、什么是 .lib 文件? .lib 文件是 靜態導入庫(Import Library) 文件,它通常與動態鏈接庫(DLL)一起生成…

細說STM32單片機FreeRTOS消息緩沖區及其應用實例

目錄 一、消息緩沖區功能概述 二、消息緩沖區操作相關函數 1、相關函數概述 2、部分函數詳解 &#xff08;1&#xff09;創建消息緩沖區 &#xff08;2&#xff09;寫入消息 &#xff08;3&#xff09;讀取消息 &#xff08;4&#xff09;消息緩沖區狀態查詢 三、消息…

【緩存】JAVA本地緩存推薦Caffeine和Guava

&#x1f31f; 引言 在軟件開發過程中&#xff0c;緩存是提升系統性能的常用手段。對于基礎場景&#xff0c;直接使用 Java集合框架&#xff08;如Map/Set/List&#xff09;即可滿足需求。然而&#xff0c;當面對更復雜的緩存場景時&#xff1a; 需要支持多種過期策略&#x…

IDA插件 MIPSROP的安裝和使用方法

前言 筆者的IDA版本為9.0&#xff0c;剛開始根據一些博客描述以為將mipsrop.py拷貝到IDA的plugins目錄即可&#xff0c;可操作后發現事情好像沒這么簡單&#xff0c;復制進去后就發現沒有博客中所說的 MIPS ROP Finder &#xff0c;筆者在網上搜索了很多博客后在 https://bbs.…

(1)轉置后,行列式的值不變 (2)將行列式的任意兩行互換位置后,行列式改變符號

以下是對原始內容在不改變內容本身的前提下進行的格式優化&#xff0c;以提升可讀性和邏輯清晰度&#xff1a; ? 行列式的幾何意義 行列式&#xff08;determinant&#xff09;是線性代數中一個非常重要的概念&#xff0c;它的幾何含義可以從以下幾個方面理解&#xff1a; &a…

最大似然估計(Maximum Likelihood Estimation, MLE)詳解

一、定義 最大似然估計 是一種參數估計方法&#xff0c;其核心思想是&#xff1a; 選擇能使觀測數據出現概率最大的參數值作為估計值。 具體來說&#xff0c;假設數據 D x 1 , x 2 , … , x n D{x_1,x_2,…,x_n} Dx1?,x2?,…,xn?獨立且服從某個概率分布 P ( x ∣ θ ) P(…

用go從零構建寫一個RPC(3)--異步調用+多路復用實現

在前兩個版本中&#xff0c;我們實現了基礎的客戶端-服務端通信、連接池、序列化等關鍵模塊。為了進一步提升吞吐量和并發性能&#xff0c;本版本新增了 異步發送機制 和 多路復用支持&#xff0c;旨在減少資源消耗、提升連接利用率。 代碼地址&#xff1a;https://github.com/…

FFmpeg 安裝包全攻略:gpl、lgpl、shared、master 區別詳解

這些 FFmpeg 安裝包有很多版本和變種&#xff0c;主要區別在于以下幾個方面&#xff1a; ? 一、從名稱中看出的關鍵參數&#xff1a; 1. 版本號 master&#xff1a;開發版&#xff0c;最新功能&#xff0c;但可能不穩定。n6.1 / n7.1&#xff1a;正式版本&#xff0c;更穩定…

深度學習實戰:從圖像分類到文本生成的完整案例解析

1 圖像分類案例 1.1 CIFAR10數據集介紹 cifar數據是torchvision第三方包提供的數據集 訓練集5w 測試集1w y標簽 10個類別 10分類問題 一張圖形狀 (32, 32, 3) import torch import torch.nn as nn from torchvision.datasets import CIFAR10 from torchvision.transforms i…

Android 添加系統服務的完整流程

[應用程序] (應用進程)│↓ 調用簡單API [SoundManager] │ ├─ 代理模式門面模式&#xff08;應用進程&#xff09;│ ├─ 緩存數據 ←─ 裝飾器模式&#xff08;應用進程&#xff09;│ └─ 轉換異常 ←─ 適配器模式&#xff08;應用進程&#xff09;│↓ 通過Bind…

wan2.1代碼筆記

GPU內存不夠&#xff0c;可以先運行umt5&#xff0c;然后再運行wanpipeline&#xff0c;參考FLUX.1代碼筆記&#xff0c;或者使用ComfyUI。 下面使用隨機數代替umt5 embedding。 import torch from diffusers.utils import export_to_video from diffusers import Autoencoder…

環境搭建與工具配置

3.1 本地環境搭建 3.1.1 WAMP環境搭建漏洞靶場&#xff08;一、二&#xff09; WAMP&#xff08;Windows Apache MySQL PHP&#xff09;是搭建本地Web漏洞靶場的基礎環境。 安裝步驟&#xff1a; Apache&#xff1a;下載并安裝最新版Apache HTTP Server&#xff0c;配置監…

STM32F446主時鐘失效時DAC輸出異常現象解析與解決方案

—### 現象概述 在STM32F446微控制器應用中&#xff0c;若主時鐘&#xff08;HSE&#xff09;的晶體信號對地短路&#xff0c;但DAC&#xff08;數模轉換器&#xff09;仍能輸出變化信號&#xff0c;這一現象看似矛盾&#xff0c;實則與系統時鐘切換機制密切相關。本文將從硬件…

React 如何封裝一個可復用的 Ant Design 組件

文章目錄 前言一、為什么需要封裝組件&#xff1f;二、 仿antd組件的Button按鈕三、封裝一個可復用的表格組件 (實戰)1. 明確需求2. 設計組件 API3. 實現組件代碼4. 使用組件 三、封裝組件的最佳實踐四、進階優化 總結 前言 作為一名前端開發工程師&#xff0c;在日常項目中&a…

STC89C52RC/LE52RC

STC89C52RC 芯片手冊原理圖擴展版原理圖 功能示例LED燈LED燈的常亮效果LED燈的閃爍LED燈的跑馬燈效果&#xff1a;從左到右&#xff0c;從右到左 數碼管靜態數碼管數碼管計數mian.cApp.cApp.hCom.cCom.hDir.cDir.hInt.cInt.hMid.cMid.h 模板mian.cApp.cApp.hCom.cCom.hDir.cDir…

踩坑記錄:RecyclerView 局部刷新notifyItemChanged多次調用只觸發一次 onBindViewHolder 的原因

1. 問題背景 在做項目的時候&#xff0c;RecyclerView需要使用局部刷新&#xff0c;使用 notifyItemChanged(position, payload) 實現局部刷新&#xff0c;但發現調用多次只執行了一次&#xff0c;第二個刷新不生效。 2. 錯誤示例&#xff08;只處理 payloads.get(0)&#xff…