使用 OpenCV 從彩色圖像創(chuàng)建鉛筆素描圖像
這個(gè)項(xiàng)目是我為 LetsGrowMore 的數(shù)據(jù)科學(xué)實(shí)習(xí)生創(chuàng)建的任務(wù)。
LetsGrowMore :https://letsgrowmore.in/vip/
OpenCV (Open Source Computer Vision Library)是一個(gè)開源的計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫。
它提供了廣泛的功能,包括對(duì)象檢測、人臉識(shí)別和跟蹤。
在這里,我們將使用 Open CV 將彩色圖像轉(zhuǎn)換為鉛筆素描。
在這里,我使用 Google Colab 作為我的 IDE。
import cv2
import matplotlib.pyplot as plt
#imported cv2_imshow specific for google colab
from google.colab.patches import cv2_imshow
#to read the image
image= cv2.imread('desktop.png')
#to display the image
cv2_imshow(image)
OpenCV使用BGR配色方案,所以這里不用改顏色。但是當(dāng)我們使用 Matplotlib 時(shí),我們需要轉(zhuǎn)換,因?yàn)樗褂?strong>RGB配色方案
#converting the image to grayscale
gray= cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
cv2_imshow(gray)
反轉(zhuǎn)灰度圖像也稱為負(fù)像。這樣做是為了增強(qiáng)圖像的細(xì)節(jié)。
#converting image to inverted grayscale
inv_gray= 255-gray
cv2_imshow(inv_gray)
使用反復(fù)試驗(yàn)找到內(nèi)核大??;對(duì)于較大的圖像,內(nèi)核大小應(yīng)該更大。
對(duì)于較小的圖像,它應(yīng)該是小數(shù)字,如 3x3 或 5x5。在小圖像中賦予大內(nèi)核值將刪除圖像的實(shí)際結(jié)構(gòu)。
blur_img=cv2.GaussianBlur(inv_gray,(101,101),0)
cv2_imshow(blur_img)
#inverting the blurred image
inv_blur=255-blur_img
cv2_imshow(inv_blur)
為了完成我們的鉛筆素描,我們需要混合灰度和倒置模糊圖像。
我們將使用CV2 divide方法來執(zhí)行該操作
CV2 divide:兩個(gè)數(shù)組或標(biāo)量除以數(shù)組的每個(gè)元素。
sketch_img= cv2.divide(gray,inv_blur,scale=255.0)
cv2_imshow(sketch_img)
我們做到了??!
正如我已經(jīng)提到的,由于我們在這里使用 Matplotlib 并排顯示圖像,因此我們需要轉(zhuǎn)換原始圖像和素描圖像。
這是因?yàn)椋琌penCV 使用BGR配色方案,而 matplotlib 使用RGB配色方案。素描圖片也一樣。
plt.figure(figsize=(14,7))
plt.subplot(1,2,1)
plt.title('Actual image in Matplotlib')
plt.imshow(image)
plt.axis('off')
plt.subplot(1,2,2)
plt.title('Color converted image in Matplotlib')
im = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
plt.imshow(im)
plt.axis('off')
plt.show()
plt.figure(figsize=(14,7))
plt.subplot(1,2,1)
plt.title('Actual image in Matplotlib')
plt.imshow(sketch_img)
plt.axis('off')
plt.subplot(1,2,2)
plt.title('Color converted image in Matplotlib')
rgb_sketch=cv2.cvtColor(sketch_img, cv2.COLOR_BGR2RGB)
plt.imshow(rgb_sketch)
plt.axis('off')
plt.show()
#displaying original image and pencil sketch image side by side
plt.figure(figsize=(14,7))
plt.subplot(1,2,1)
plt.imshow(im)
plt.axis('off')
plt.subplot(1,2,2)
plt.imshow(rgb_sketch)
plt.axis('off')
plt.show()
終于我們到了最后一步。保存圖片。imwrite用于保存圖片。
# saving the picture
# Filename
filename = 'sketch.png'
cv2.imwrite(filename, sketch_img)
你可以在這里查看我的 GitHub 代碼??!
https://github.com/Kavya2099/LGMVIP-DataScience/tree/main/Task%201
聯(lián)系客服