一文學(xué)會使用Opencv創(chuàng)建類似Instagram的濾鏡
什么是圖像濾鏡?
圖像濾鏡是一種方法或過程,通過它可以修改圖像的顏色、陰影、色調(diào)、飽和度、紋理和其他特征。濾鏡用于根據(jù)商業(yè)、藝術(shù)或?qū)徝佬枰谝曈X上修改圖像。
如今,圖像濾鏡在社交媒體中非常普遍。Instagram 有各種各樣的濾鏡,Facebook 也是如此。Picsart 等編輯應(yīng)用程序也提供了許多濾鏡。濾鏡可以為圖像提供新的視覺效果并使其看起來不同。人們使用濾鏡為他們的照片提供他們想要的效果。
這里OpenCV有什么用?
OpenCV 是一個免費使用的 Python 庫,可用于計算機視覺任務(wù)。它具有許多功能和方法,可用于執(zhí)行各種任務(wù)。我將應(yīng)用一些圖像轉(zhuǎn)換方法來獲取濾鏡并創(chuàng)建所需的效果。
讓我們繼續(xù)進行所需的導(dǎo)入。
import cv2
import numpy as np
import scipy
我們將主要需要 NumPy 和 OpenCV,稍后將需要 SciPy。
現(xiàn)在讓我們閱讀圖像文件。
這是我們將要使用的圖像文件。
#Read the image
image = cv2.imread('shop.jpg')
現(xiàn)在,我們可以繼續(xù)實現(xiàn)濾鏡。
灰度濾鏡
我們從實現(xiàn)最基本和最廣泛使用的濾鏡開始。
灰度濾鏡用于為圖像提供黑白效果;旧先コ藞D像中的彩色成分。我們將使用 cv2.cvtColor()將圖像轉(zhuǎn)換為灰度。
#greyscale filter
def greyscale(img):
greyscale = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
return greyscale
現(xiàn)在,將該函數(shù)應(yīng)用于我們的圖像。
#making the greyscale image
a1 = greyscale(image)
現(xiàn)在,我們將圖像保存為文件。
filename = 'greyscale.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a1)
輸出:
因此,我們可以看到圖像已成功轉(zhuǎn)換為灰度。接下來,讓我們嘗試另一個。
亮度調(diào)節(jié)
通常,我們看到濾鏡使圖像更亮,而其他濾鏡會降低亮度。這些是亮度調(diào)整濾鏡的結(jié)果。為此,我們將使用 cv2.convertScaleAbs()?梢愿 Beta 值以獲得適當?shù)慕Y(jié)果。
# brightness adjustment
def bright(img, beta_value ):
img_bright = cv2.convertScaleAbs(img, beta=beta_value)
return img_bright
函數(shù)已定義,現(xiàn)在 beta 值將給出適當?shù)慕Y(jié)果。正值表示圖像較亮,負值表示圖像較暗。
#making the more bright image
#positive beta value
a2 = bright(image, 60)
現(xiàn)在,我們保存圖像。
filename = 'more_bright.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a2)
輸出:
正如我們所看到的,圖像現(xiàn)在更亮了,F(xiàn)在,讓我們制作一個更暗的圖像。
#making the less bright image
#negative beta value
a3 = bright(image, -60)
使用負Beta 值,F(xiàn)在,讓我們保存圖像。
filename = 'less_bright.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a3)
輸出:
我們可以看到圖像現(xiàn)在不那么亮了。
銳利效果
銳化效果也被大量使用。我們將使用OpenCV 中的 filter2D方法進行適當?shù)木庉嫛?/p>
銳化效果的內(nèi)核將是:[[-1, -1, -1], [-1, 9.5, -1], [-1, -1, -1]]
讓我們繼續(xù)編碼:
#sharp effect
def sharpen(img):
kernel = np.a(chǎn)rray([[-1, -1, -1], [-1, 9.5, -1], [-1, -1, -1]])
img_sharpen = cv2.filter2D(img, -1, kernel)
return img_sharpen
現(xiàn)在,讓我們保存圖像。
#making the sharp image
a4 = sharpen(image)
filename = 'sharpen.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a4)
輸出:
正如我們所看到的,圖像現(xiàn)在更清晰了。
棕褐色濾鏡
棕褐色是圖像編輯中最常用的濾鏡之一。棕褐色為照片增添了溫暖的棕色效果。復(fù)古、平靜和懷舊的效果被添加到圖像中。
讓我們在 Python 中實現(xiàn)。
為此,我們將使用 cv2.transform() 函數(shù)。繼續(xù)代碼。
#sepia effect
def sepia(img):
img_sepia = np.a(chǎn)rray(img, dtype=np.float64) # converting to float to prevent loss
img_sepia = cv2.transform(img_sepia, np.matrix([[0.272, 0.534, 0.131],
[0.349, 0.686, 0.168],
[0.393, 0.769, 0.189]])) # multipying image with special sepia matrix
img_sepia[np.where(img_sepia > 255)] = 255 # normalizing values greater than 255 to 255
img_sepia = np.a(chǎn)rray(img_sepia, dtype=np.uint8)
return img_sepia
讓我們實現(xiàn)該功能并保存圖像。
#making the sepia image
a5 = sepia(image)
filename = 'sepia.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a5)
輸出:
效果看起來很棒。濾鏡實現(xiàn)完美。
鉛筆素描效果:灰度
讓我們實現(xiàn)一個灰度鉛筆素描效果。事實上,它很容易實現(xiàn),因為有一個內(nèi)置函數(shù)來實現(xiàn)它。
#grey pencil sketch effect
def pencil_sketch_grey(img):
#inbuilt function to create sketch effect in colour and greyscale
sk_gray, sk_color = cv2.pencilSketch(img, sigma_s=60, sigma_r=0.07, shade_factor=0.1)
return sk_gray
現(xiàn)在,我們應(yīng)用該函數(shù)并保存圖像。
#making the grey pencil sketch
a6 = pencil_sketch_grey(image)
filename = 'pencil_grey.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a6)
輸出:
確實,圖像看起來像一個粗略的鉛筆素描,F(xiàn)在,是時候?qū)崿F(xiàn)彩色版本了。
鉛筆素描效果:彩色版本
現(xiàn)在,我們實現(xiàn)鉛筆素描效果的彩色版本。
#colour pencil sketch effect
def pencil_sketch_col(img):
#inbuilt function to create sketch effect in colour and greyscale
sk_gray, sk_color = cv2.pencilSketch(img, sigma_s=60, sigma_r=0.07, shade_factor=0.1)
return sk_color
我們應(yīng)用該函數(shù)并保存圖像。
#making the colour pencil sketch
a7 = pencil_sketch_col(image)
filename = 'pencil_col.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a7)
輸出:
效果相當有趣,總體而言,實現(xiàn)了鉛筆素描效果。
HDR效果:
HDR 效果被大量使用,因為它增加了圖像的細節(jié)層次。我將使用 **cv2.detailEnhance()**來實現(xiàn)這一點。
#HDR effect
def HDR(img):
hdr = cv2.detailEnhance(img, sigma_s=12, sigma_r=0.15)
return hdr
現(xiàn)在,我們應(yīng)用該函數(shù)。
#making the hdr img
a8 = HDR(image)
現(xiàn)在,我們保存圖像。
filename = 'HDR.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a8)
輸出:
反轉(zhuǎn)濾鏡
反轉(zhuǎn)濾鏡實際上很容易實現(xiàn)。每個人都曾在某些時候使用過這種濾鏡,讓他們的頭發(fā)變白。
所有,我們要做的基本上就是反轉(zhuǎn)像素值。這可以通過將像素值減去 255 來完成。在 Python 中,我們可以為此使用 cv2.bitwise_not()函數(shù)。
# invert filter
def invert(img):
inv = cv2.bitwise_not(img)
return inv
現(xiàn)在,讓我們應(yīng)用該功能并保存圖像。
#making the invert img
a9 = invert(image)
filename = 'invert.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a9)
輸出:
好像是異世界的東西吧?好吧,反轉(zhuǎn)濾鏡確實很有趣。
現(xiàn)在我們將嘗試夏季和冬季效果濾鏡。
為此,我們需要一個查找表。但是從頭開始創(chuàng)建查找表是一個很大的過程。我們可以使用 SciPy 函數(shù)來實現(xiàn)這一點。
#defining a function
from scipy.interpolate import UnivariateSpline
def LookupTable(x, y):
spline = UnivariateSpline(x, y)
return spline(range(256))
現(xiàn)在,函數(shù)已定義,讓我們繼續(xù)。
夏季效果濾鏡
讓我們實現(xiàn)一個夏季效果濾鏡,它基本上增加了圖像的溫暖度。為了實現(xiàn)這一點,我們將增加紅色通道中的值并減少藍色通道中的值。
#summer effect
def Summer(img):
increaseLookupTable = LookupTable([0, 64, 128, 256], [0, 80, 160, 256])
decreaseLookupTable = LookupTable([0, 64, 128, 256], [0, 50, 100, 256])
blue_channel, green_channel,red_channel = cv2.split(img)
red_channel = cv2.LUT(red_channel, increaseLookupTable).a(chǎn)stype(np.uint8)
blue_channel = cv2.LUT(blue_channel, decreaseLookupTable).a(chǎn)stype(np.uint8)
sum= cv2.merge((blue_channel, green_channel, red_channel ))
return sum
現(xiàn)在,保存圖像。
#making the summer img
a11 = Summer(image)
filename = 'Summer.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a11)
輸出:
實現(xiàn)了夏季效果濾鏡。
現(xiàn)在,我們實現(xiàn)冬季效果濾鏡。
冬季效果濾鏡:
在冬季效果濾鏡中,將進行相反的操作。圖像的溫暖度會降低。紅色通道中的值將減少,藍色通道中的值將增加。
#winter effect
def Winter(img):
increaseLookupTable = LookupTable([0, 64, 128, 256], [0, 80, 160, 256])
decreaseLookupTable = LookupTable([0, 64, 128, 256], [0, 50, 100, 256])
blue_channel, green_channel,red_channel = cv2.split(img)
red_channel = cv2.LUT(red_channel, decreaseLookupTable).a(chǎn)stype(np.uint8)
blue_channel = cv2.LUT(blue_channel, increaseLookupTable).a(chǎn)stype(np.uint8)
win= cv2.merge((blue_channel, green_channel, red_channel))
return win
代碼已實現(xiàn)。所以,現(xiàn)在我們保存圖像。
#making the winter img
a10 = Winter(image)
filename = 'Winter.jpg'
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, a10)
輸出:
效果實現(xiàn)了。圖像暖度降低并產(chǎn)生寒冷效果。
請輸入評論內(nèi)容...
請輸入評論/評論長度6~500個字
最新活動更多
-
即日-11.13立即報名>>> 【在線會議】多物理場仿真助跑新能源汽車
-
11月28日立即報名>>> 2024工程師系列—工業(yè)電子技術(shù)在線會議
-
12月19日立即報名>> 【線下會議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會
-
即日-12.26火熱報名中>> OFweek2024中國智造CIO在線峰會
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍皮書》
-
精彩回顧立即查看>> 【限時免費下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
推薦專題
- 高級軟件工程師 廣東省/深圳市
- 自動化高級工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級銷售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專家 廣東省/江門市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市