本文所使用的 CodeBuddy 免費下載鏈接:騰訊云代碼助手 CodeBuddy - AI 時代的智能編程伙伴
前言
最近在社交媒體上,各種素描風格的圖片火得一塌糊涂,身邊不少朋友都在分享自己的 “素描照”,看著那些黑白線條勾勒出的獨特韻味,我心里直癢癢,特別想自己動手試試,把喜歡的彩色圖片變成黑白素描手繪風格。在網上找了不少在線工具,要么功能有限,要么畫質差強人意,我就琢磨著能不能在本地實現這個功能,畢竟自己動手,不僅能按需調整效果,還更有成就感。
一番研究后,我發現使用 Python 的 opencv 模塊就可以實現圖片轉素描的功能,可我雖然對 Python 有一定了解,但真要從零開始寫代碼,還是有點害怕了。就在這時,CodeBuddy 進入了我的視線。CodeBuddy 擁有強大的代碼智能補全和實時語法檢查功能,對于我這種偶爾會粗心犯錯的人來說,簡直太友好了,能及時發現并糾正代碼中的錯誤,大大提高了開發效率。而且它還支持多種編程語言和框架,和 opencv 模塊搭配使用毫無壓力,還能提供很多相關的代碼示例和優化建議,讓我在開發過程中少走了很多彎路。
使用CodeBuddy完成圖片的素描化
我們打開vscode進入到拓展中直接搜索CodeBuddy,點擊安裝這個插件就行了
我們點擊左側的插件圖標就能進行使用了
還是老樣子先生成README文件
對ai說:
我想實現圖片轉素描手繪工具,本工具主要使用python的opencv模塊編寫,將彩色圖片轉成黑白素描手繪圖,你幫我生成下README文件
然后直接到Craft艾特這個文件進行直接開發,代碼生成很快
代碼生成好了之后我們直接運行程序,在終端輸入命令python code.py
讓我們選擇一個圖片并且文件的路徑必須得是英文路徑,不能包含中文
然后他就生成出了一張素描畫,我們可以和原照片對比下,效果還是挺不錯的,我這里的代碼配置參數直接就是默認的,你們也可以進行設置的
相關代碼如下:
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,相信它會給你帶來驚喜!