opencv-hsv圖像分割

【OpenCV實戰(zhàn)】基于HSV的顏色分割Python實現(xiàn)(含Python代碼)

標(biāo)簽: OPenCV自學(xué)記錄 python 機器學(xué)習(xí) 人工智能

版權(quán)聲明:本文為qq_40784418原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明

原文鏈接:https://blog.csdn.net/qq_40784418/article/details/106347196

轉(zhuǎn)自:https://blog.csdn.net/qq_40784418/article/details/106347196](https://blog.csdn.net/qq_40784418/article/details/106347196)

一周沒有更新博客了,這一周的時間內(nèi)加強了對機器學(xué)習(xí)和圖像處理的學(xué)習(xí)。學(xué)的有點混亂贪惹,有必要記錄一下。

深度學(xué)習(xí)可以解決很多問題,但有時候深度學(xué)習(xí)和圖像處理相結(jié)合才能有更好的效果:比如聊浅,在進(jìn)行交通信號燈檢測時,用目標(biāo)檢測模型確定信號燈位置后现使,對信號燈進(jìn)行顏色分割再識別可大大提高準(zhǔn)確率低匙。

機器學(xué)習(xí)領(lǐng)域中有句話:數(shù)據(jù)和特征決定了模型的上限,而算法只不過是逼近這個上限而已碳锈,所以了解機器學(xué)習(xí)的常用算法顽冶,熟悉機器學(xué)習(xí)中的特征工程是很有必要的。

【OpenCV實戰(zhàn)】基于HSV的顏色分割實現(xiàn)(含Python代碼)

1贸人、什么是HSV

我們知道RGB顏色模式间景,通過不同的配比可以形成不同的顏色。HSV也是一種顏色模式艺智,其模型如圖所示


在這里插入圖片描述

通過圖示我們也能夠看到倘要,他和RGB顏色模型相似,也是由三個屬性決定顏色十拣,H封拧、S志鹃、V分別是色彩、深度泽西、明暗曹铃,按著圖中方向的變化,其對應(yīng)的顏色也會改變尝苇,三者也同樣是有取值范圍的:

  • H(色調(diào)):用角度度量铛只,取值范圍為0°~360°
  • S(飽和度):表示顏色接近光譜色的程度。通常取值范圍為0%~100%糠溜,值越大淳玩,顏色越飽和。
  • V(明度):表示顏色明亮的程度非竿,對于光源色蜕着,明度值與發(fā)光體的光亮度有關(guān);對于物體色红柱,此值和物體的透射比或反射比有關(guān)承匣。通常取值范圍為0%(黑)到100%(白)。

HSV空間中三個指標(biāo)相互獨立锤悄,能夠非常直觀的表達(dá)色彩的明暗韧骗,色調(diào),以及鮮艷程度零聚,方便進(jìn)行顏色之間的對比袍暴,所以經(jīng)常在HSV中進(jìn)行顏色的分割識別。在HSV中各個顏色的范圍見下表

在這里插入圖片描述

2隶症、代碼實戰(zhàn)

從網(wǎng)上下載了一張交通信號燈的圖片政模,如圖


在這里插入圖片描述

我們的目的是進(jìn)行顏色分割,將我們感興趣的區(qū)域提取出來以方便下一步的操作蚂会。

2.1 createTrackbar使用方法及步驟

在開始實際操作之前淋样,來了解一下createTrackbar。createTrackbar是Opencv中的API胁住,其可在顯示圖像的窗口中快速創(chuàng)建一個滑動控件趁猴,用于手動調(diào)節(jié)閾值,具有非常直觀的效果彪见。可以直接觀察閾值選擇的效果躲叼,并確定想要的閾值。
使用Trackbar我們要了解兩個函數(shù)企巢;
(1)創(chuàng)建滑動條函數(shù)
一個滑動條只能用于一個參數(shù),如果需要改變多個參數(shù)让蕾,可以使用多個滑動條浪规。

cv2.createTrackbar(trackbarName, windowName, value, count, onChange)

各參數(shù)意義:
trackbarName:滑動空間的名稱或听;
windowName:滑動空間用于依附的圖像窗口的名稱;
value:初始化閾值笋婿;
count:滑動控件的刻度范圍誉裆;最小值默認(rèn)為0。
onChange:回調(diào)函數(shù)(所謂回調(diào)函數(shù)即每次修改滑動條后缸濒,需要傳入新變量的函數(shù))的名稱足丢,其定義如下:
onchange:void foo(int,void*)庇配。
其中第一個參數(shù)是滑動條位置斩跌,第二個參數(shù)是用戶數(shù)據(jù)(請參見下一個參數(shù))。如果回調(diào)是空指針捞慌,則不調(diào)用回調(diào)耀鸦,但只更新值
用戶數(shù)據(jù):按原樣傳遞給回調(diào)的用戶數(shù)據(jù)。它可以用來處理滑動條事件而不使用全局變量啸澡。

(2)獲取滑動條的值函數(shù)
cv.getTrackbarPos獲取滑動條位置處的值

g = cv2.getTrackbarPos(trackbarName2, windowName)
#第一個參數(shù)為滑動條1的名稱袖订,第二個參數(shù)為窗口的名稱。

注意:需要在回調(diào)函數(shù)內(nèi)部采用函數(shù)cv.getTrackbarPos獲取滑動條位置處的值嗅虏,不然如果存在多個滑動條時洛姑,函數(shù)無法獲取更新后的參數(shù)值

2.2 代碼詳解

import cv2

# 滑動條的回調(diào)函數(shù)皮服,獲取滑動條位置處的值
def empty(a):
    h_min = cv2.getTrackbarPos("Hue Min","TrackBars")
    h_max = cv2.getTrackbarPos("Hue Max", "TrackBars")
    s_min = cv2.getTrackbarPos("Sat Min", "TrackBars")
    s_max = cv2.getTrackbarPos("Sat Max", "TrackBars")
    v_min = cv2.getTrackbarPos("Val Min", "TrackBars")
    v_max = cv2.getTrackbarPos("Val Max", "TrackBars")
    print(h_min, h_max, s_min, s_max, v_min, v_max)
    return h_min, h_max, s_min, s_max, v_min, v_max

path = 'Resources/11.jpg'
# 創(chuàng)建一個窗口楞艾,放置6個滑動條
cv2.namedWindow("TrackBars")
cv2.resizeWindow("TrackBars",640,240)
cv2.createTrackbar("Hue Min","TrackBars",0,179,empty)
cv2.createTrackbar("Hue Max","TrackBars",19,179,empty)
cv2.createTrackbar("Sat Min","TrackBars",110,255,empty)
cv2.createTrackbar("Sat Max","TrackBars",240,255,empty)
cv2.createTrackbar("Val Min","TrackBars",153,255,empty)
cv2.createTrackbar("Val Max","TrackBars",255,255,empty)

while True:
    img = cv2.imread(path)
    imgHSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
    # 調(diào)用回調(diào)函數(shù),獲取滑動條的值
    h_min,h_max,s_min,s_max,v_min,v_max = empty(0)
    lower = np.array([h_min,s_min,v_min])
    upper = np.array([h_max,s_max,v_max])
    # 獲得指定顏色范圍內(nèi)的掩碼
    mask = cv2.inRange(imgHSV,lower,upper)
    # 對原圖圖像進(jìn)行按位與的操作冰更,掩碼區(qū)域保留
    imgResult = cv2.bitwise_and(img,img,mask=mask)

    cv2.imshow("Mask", mask)
    cv2.imshow("Result", imgResult)

    cv2.waitKey(1)

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

其實在交通信號燈檢測中产徊,我們只需要獲得掩碼(mask圖像)就可以進(jìn)行識別了。

3蜀细、總結(jié)

顏色分割在很多場景都可以用到舟铜,結(jié)合深度學(xué)習(xí)會有更好的效果。下一篇博客將記錄如何進(jìn)行字符分割奠衔。字符分割的應(yīng)用場景和思路應(yīng)用同樣廣泛谆刨。

版權(quán)聲明:本文為qq_40784418原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議归斤,轉(zhuǎn)載請附上原文出處鏈接和本聲明

原文鏈接:https://blog.csdn.net/qq_40784418/article/details/106347196

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末痊夭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子脏里,更是在濱河造成了極大的恐慌她我,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異番舆,居然都是意外死亡酝碳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門恨狈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疏哗,“玉大人,你說我怎么就攤上這事禾怠》捣睿” “怎么了?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵吗氏,是天一觀的道長芽偏。 經(jīng)常有香客問我,道長牲证,這世上最難降的妖魔是什么哮针? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮坦袍,結(jié)果婚禮上十厢,老公的妹妹穿的比我還像新娘。我一直安慰自己捂齐,他們只是感情好蛮放,可當(dāng)我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奠宜,像睡著了一般包颁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上压真,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天娩嚼,我揣著相機與錄音,去河邊找鬼滴肿。 笑死岳悟,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的泼差。 我是一名探鬼主播贵少,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼堆缘!你這毒婦竟也來了滔灶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤吼肥,失蹤者是張志新(化名)和其女友劉穎录平,沒想到半個月后麻车,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡萄涯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年绪氛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涝影。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖争占,靈堂內(nèi)的尸體忽然破棺而出燃逻,到底是詐尸還是另有隱情,我是刑警寧澤臂痕,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布伯襟,位于F島的核電站,受9級特大地震影響握童,放射性物質(zhì)發(fā)生泄漏姆怪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一澡绩、第九天 我趴在偏房一處隱蔽的房頂上張望稽揭。 院中可真熱鬧,春花似錦肥卡、人聲如沸溪掀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揪胃。三九已至,卻和暖如春氛琢,著一層夾襖步出監(jiān)牢的瞬間喊递,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工阳似, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留骚勘,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓障般,卻偏偏與公主長得像调鲸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子挽荡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,055評論 2 355