如何利用Python+OpenCV的色彩過(guò)濾和色彩流行效果
你曾經(jīng)想過(guò)從圖像中分離單一色調(diào)嗎?本文介紹了使用OpenCV python從常規(guī)RGB圖像中過(guò)濾特定顏色的過(guò)程。讓我們開(kāi)始吧。
色調(diào)在開(kāi)始過(guò)濾顏色之前,最好對(duì)色調(diào)有一個(gè)基本的了解。這是維基百科上關(guān)于色調(diào)的定義之一在顏色理論中,色調(diào)是一種顏色的主要屬性(稱為顏色外觀參數(shù)),在CIECAM02模型中技術(shù)上定義為“刺激可描述為與紅色調(diào)似或不同的程度” ,橙色,黃色,綠色,藍(lán)色,紫色”,在某些色覺(jué)理論中被稱為獨(dú)特的色調(diào)。我知道這聽(tīng)起來(lái)很難以理解,但讓我給你解釋一下!按碳ぁ边@個(gè)詞在這里的意思是當(dāng)我們看到一個(gè)物體時(shí)到達(dá)我們眼睛的光,F(xiàn)在讓我重新定義一下。我們看到的所有顏色,都可以被解釋為紅、橙、黃、綠、藍(lán)、紫這些顏色的變體,在某些色彩視覺(jué)理論中,這些顏色被稱為獨(dú)特的色調(diào)?偠灾,色調(diào)是原色和次色最純粹的形式。一般來(lái)說(shuō),色調(diào)是按顏色圈的360度來(lái)衡量的,但在OpenCV中,色調(diào)尺度只有180度。HSV(色調(diào),飽和度,值)就像我們用來(lái)表示RGB和BGR等圖像的最常見(jiàn)顏色空間一樣,HSV也是一個(gè)顏色空間,其中H表示色調(diào),S表示飽和度,V表示值。因?yàn)槲覀円呀?jīng)知道什么是色調(diào),讓我們看看飽和度和值飽和度飽和度使顏色變得純凈。純色中沒(méi)有灰色。顏色中混合的灰色越多,飽和度越低。飽和度值通常從0到100%測(cè)量,但在OpenCV中,飽和度的范圍是從0到255。值這是一種顏色亮度的量度。當(dāng)亮度值最大時(shí),顏色變?yōu)榘咨,?dāng)亮度值最小時(shí),顏色變?yōu)楹谏。這通常是0到100%,但在OpenCV中,值的范圍是從0到255,F(xiàn)在讓我們采取一些實(shí)際行動(dòng)。過(guò)濾顏色為了使用OpenCV過(guò)濾顏色,我們必須指定顏色的色調(diào)范圍,我們需要過(guò)濾,并為顏色創(chuàng)建一個(gè)遮罩。然后利用遮罩對(duì)原始圖像陣列(本文將詳細(xì)討論)進(jìn)行按位與運(yùn)算,得到濾波后的顏色結(jié)果。讓我們嘗試從下圖中過(guò)濾出綠色:
從上圖中濾除綠色的代碼為:#import the libraries
import cv2 as cv
import numpy as np
#read the image
img = cv.imread("D://medium_blogs//flower.jpg")
#convert the BGR image to HSV colour space
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
#set the lower and upper bounds for the green hue
lower_green = np.a(chǎn)rray([50,100,50])
upper_green = np.a(chǎn)rray([70,255,255])
#create a mask for green colour using inRange function
mask = cv.inRange(hsv, lower_green, upper_green)
#perform bitwise and on the original image arrays using the mask
res = cv.bitwise_and(img, img, mask=mask)
#create resizable windows for displaying the images
cv.namedWindow("res", cv.WINDOW_NORMAL)
cv.namedWindow("hsv", cv.WINDOW_NORMAL)
cv.namedWindow("mask", cv.WINDOW_NORMAL)
#display the images
cv.imshow("mask", mask)
cv.imshow("hsv", hsv)
cv.imshow("res", res)
if cv.waitKey(0):
cv.destroyAllWindows()
上述代碼片段的結(jié)果是:
HSV圖像蒙版
只有綠色的最終圖像
使用色彩過(guò)濾的概念創(chuàng)建色彩流行效果現(xiàn)在我們知道了如何創(chuàng)建顏色過(guò)濾器,讓我們看看如何使用OpenCV創(chuàng)建彩色流行效果。讓我們使用下面的圖像來(lái)演示這一點(diǎn)。
創(chuàng)建紅色彈出濾鏡的流程如下:
讀取圖像并將其轉(zhuǎn)換為HSV格式。設(shè)置要過(guò)濾的紅色HSV的下界和上界。查找顏色的HSV顏色空間值的一種方法是運(yùn)行以下代碼片段。img = np.uint8([[[0,0,255]]])
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
print(hsv)
OpenCV以BGR格式讀取圖像,這就是為什么紅色是[0,0,255]。上面的代碼片段打印如下:[[0 255 255]]
它是紅色的HSV值(色調(diào)- 0,飽和度- 255(100%),值- 255(100%)。你還可以對(duì)圖像中的特定像素做同樣的工作,以找到該像素的HSV值。pixel = img[3124, 2342]
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
print(hsv)
因?yàn)槲覀冎牢覀儸F(xiàn)在試圖過(guò)濾的顏色的HSV值,我們可以根據(jù)我們的需要分別調(diào)整色調(diào),飽和度和值來(lái)設(shè)置上界和下界。使用OpenCV的inRange函數(shù)為紅色色調(diào)創(chuàng)建一個(gè)遮罩。使用遮罩上的bitwise_not操作創(chuàng)建遮罩的逆遮罩。使用遮罩(前景)只過(guò)濾原始圖像的紅色部分。使用cv.cvtColor函數(shù)獲取原始圖像的灰度格式。現(xiàn)在使用遮罩的反面從灰度圖像(背景)中只過(guò)濾原始圖像中包含紅色以外的顏色的區(qū)域。在將背景添加到前景之前,必須使用numpy.stack()函數(shù)將只有一個(gè)通道的灰度背景圖像轉(zhuǎn)換為三個(gè)通道的灰度圖像。這一步應(yīng)該做,因?yàn)镺penCV的add函數(shù)只有在要添加的圖像的形狀相同時(shí)才能工作。添加前景和背景以得到最終的圖像,只有紅色從灰度背景中突出。創(chuàng)建紅色彈出濾鏡的代碼是:#import the libraries
import cv2 as cv
import numpy as np
#read the image
img = cv.imread("D://medium_blogs//red_coat.jpg")
#convert the BGR image to HSV colour space
hsv = cv.cvtColor(img, cv.COLOR_BGR2HSV)
#obtain the grayscale image of the original image
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
#set the bounds for the red hue
lower_red = np.a(chǎn)rray([160,100,50])
upper_red = np.a(chǎn)rray([180,255,255])
#create a mask using the bounds set
mask = cv.inRange(hsv, lower_red, upper_red)
#create an inverse of the mask
mask_inv = cv.bitwise_not(mask)
#Filter only the red colour from the original image using the mask(foreground)
res = cv.bitwise_and(img, img, mask=mask)
#Filter the regions containing colours other than red from the grayscale image(background)
background = cv.bitwise_and(gray, gray, mask = mask_inv)
#convert the one channelled grayscale background to a three channelled image
background = np.stack((background,)*3, axis=-1)
#add the foreground and the background
added_img = cv.a(chǎn)dd(res, background)
#create resizable windows for the images
cv.namedWindow("res", cv.WINDOW_NORMAL)
cv.namedWindow("hsv", cv.WINDOW_NORMAL)
cv.namedWindow("mask", cv.WINDOW_NORMAL)
cv.namedWindow("added", cv.WINDOW_NORMAL)
cv.namedWindow("back", cv.WINDOW_NORMAL)
cv.namedWindow("mask_inv", cv.WINDOW_NORMAL)
cv.namedWindow("gray", cv.WINDOW_NORMAL)
#display the images
cv.imshow("back", background)
cv.imshow("mask_inv", mask_inv)
cv.imshow("added",added_img)
cv.imshow("mask", mask)
cv.imshow("gray", gray)
cv.imshow("hsv", hsv)
cv.imshow("res", res)
if cv.waitKey(0):
cv.destroyAllWindows()
現(xiàn)在讓我們看看結(jié)果:灰度圖像
HSV圖像
遮罩
遮罩逆
背景
前景
現(xiàn)在,是時(shí)候揭曉最期待的最終結(jié)果了!向你展示添加的最終圖像。
如你所見(jiàn),我們得到了一些令人驚訝的結(jié)果。我們成功地將紅色從圖像中分離出來(lái),將剩下的圖像變成了灰度,給我們帶來(lái)了這幅唯美的杰作。就這樣了,恭喜你,你已經(jīng)使用OpenCV創(chuàng)建了自己的彩色流行濾鏡!現(xiàn)在你可以讓自己感覺(jué)舒服,試著自己過(guò)濾除紅色以外的其他顏色。
發(fā)表評(píng)論
請(qǐng)輸入評(píng)論內(nèi)容...
請(qǐng)輸入評(píng)論/評(píng)論長(zhǎng)度6~500個(gè)字
最新活動(dòng)更多
-
10月31日立即下載>> 【限時(shí)免費(fèi)下載】TE暖通空調(diào)系統(tǒng)高效可靠的組件解決方案
-
即日-11.13立即報(bào)名>>> 【在線會(huì)議】多物理場(chǎng)仿真助跑新能源汽車(chē)
-
11月28日立即報(bào)名>>> 2024工程師系列—工業(yè)電子技術(shù)在線會(huì)議
-
12月19日立即報(bào)名>> 【線下會(huì)議】OFweek 2024(第九屆)物聯(lián)網(wǎng)產(chǎn)業(yè)大會(huì)
-
即日-12.26火熱報(bào)名中>> OFweek2024中國(guó)智造CIO在線峰會(huì)
-
即日-2025.8.1立即下載>> 《2024智能制造產(chǎn)業(yè)高端化、智能化、綠色化發(fā)展藍(lán)皮書(shū)》
推薦專(zhuān)題
- 1 【一周車(chē)話】沒(méi)有方向盤(pán)和踏板的車(chē),你敢坐嗎?
- 2 特斯拉發(fā)布無(wú)人駕駛車(chē),還未迎來(lái)“Chatgpt時(shí)刻”
- 3 特斯拉股價(jià)大跌15%:Robotaxi離落地還差一個(gè)蘿卜快跑
- 4 馬斯克給的“驚喜”夠嗎?
- 5 大模型“新星”開(kāi)啟變現(xiàn)競(jìng)速
- 6 海信給AI電視打樣,12大AI智能體全面升級(jí)大屏體驗(yàn)
- 7 打完“價(jià)格戰(zhàn)”,大模型還要比什么?
- 8 馬斯克致敬“國(guó)產(chǎn)蘿卜”?
- 9 神經(jīng)網(wǎng)絡(luò),誰(shuí)是盈利最強(qiáng)企業(yè)?
- 10 比蘋(píng)果偉大100倍!真正改寫(xiě)人類(lèi)歷史的智能產(chǎn)品降臨
- 高級(jí)軟件工程師 廣東省/深圳市
- 自動(dòng)化高級(jí)工程師 廣東省/深圳市
- 光器件研發(fā)工程師 福建省/福州市
- 銷(xiāo)售總監(jiān)(光器件) 北京市/海淀區(qū)
- 激光器高級(jí)銷(xiāo)售經(jīng)理 上海市/虹口區(qū)
- 光器件物理工程師 北京市/海淀區(qū)
- 激光研發(fā)工程師 北京市/昌平區(qū)
- 技術(shù)專(zhuān)家 廣東省/江門(mén)市
- 封裝工程師 北京市/海淀區(qū)
- 結(jié)構(gòu)工程師 廣東省/深圳市