openCV【實(shí)踐系列】4——使用Opencv進(jìn)行斑點(diǎn)(blob)檢測(cè)

本教程闡述了使用opencv進(jìn)行簡(jiǎn)單的斑點(diǎn)檢測(cè)

什么是斑點(diǎn)?

斑點(diǎn)是圖像中的一組連接像素,它們共享一些共同屬性(例如灰度值)西乖。在下圖中,暗連通區(qū)域是斑點(diǎn)坛增,斑點(diǎn)檢測(cè)的目標(biāo)是識(shí)別和標(biāo)記這些區(qū)域获雕。

簡(jiǎn)單的斑點(diǎn)檢測(cè)器示例

opencv提供了一種檢測(cè)斑點(diǎn)的便捷方法,并根據(jù)不同的特征對(duì)其進(jìn)行過(guò)濾收捣。讓我們從最簡(jiǎn)單的例子開(kāi)始:

Python:

importcv2

importnumpyasnp

#讀圖片

im = cv2.imread('blod.jpg', cv2.IMREAD_GRAYSCALE)

#創(chuàng)建一個(gè)檢測(cè)器并使用默認(rèn)參數(shù)

detector = cv2.SimpleBlobDetector()

#檢測(cè)斑點(diǎn)

keypoints = detector.detect(im)

#將檢測(cè)到的斑點(diǎn)圈上紅色的圓圈

#DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS保證圓的大小和斑點(diǎn)大小一樣

im_with_keypoints = cv2.drawKeypoints(im, keypoints, np.array([]), (0,0,255),

? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

#顯示檢測(cè)到的點(diǎn)

cv2.imshow('keypoints', im_with_keypoints)

cv2.waitKey(0)

以下是得到的檢測(cè)結(jié)果左圖是原圖届案,右圖是結(jié)果圖:

斑點(diǎn)檢測(cè)器是如何工作呢?

顧名思義罢艾,SimpleBlobDetector是一種簡(jiǎn)單的算法楣颠,該算法由檢測(cè)器的參數(shù)控制,并由以下幾步組成:

? ?? ???1.?閾值處理:?通過(guò)使用從minThreshold開(kāi)始的閾值對(duì)源圖像進(jìn)行閾值處理咐蚯,將源圖像轉(zhuǎn)換成多個(gè)二進(jìn)制圖像童漩。這些閾值以thresholdStep大小依次遞增直到maxThreshold,所以第一個(gè)閾值是minThreshold仓蛆,第二個(gè)是minThreshold+thresholdStep睁冬,第三個(gè)是minThreshold+2*thresholdStep,依此類(lèi)推看疙。

? ?? ???2. 分組:在每個(gè)二進(jìn)制圖像中豆拨,連接白色像素被分成一組,我們稱(chēng)為二進(jìn)制斑點(diǎn)

? ?? ???3.?合并:?計(jì)算二進(jìn)制圖像中二進(jìn)制斑點(diǎn)的重心能庆,并合并更靠近minDistBetweenBlobs的斑點(diǎn)

? ?? ???4. 中心和半徑計(jì)算:計(jì)算并返回新合并的斑點(diǎn)的中心點(diǎn)和半徑值

按顏色施禾,大小和形狀來(lái)過(guò)濾斑點(diǎn)

可以設(shè)置SimpleBlobDetector的參數(shù)來(lái)過(guò)濾我們想要的斑點(diǎn)類(lèi)型:

? ?? ???1.?按顏色:(注意:此功能已經(jīng)損壞,我檢查了代碼搁胆,它似乎有一個(gè)邏輯錯(cuò)誤)首先你需要設(shè)置filterByColor=1弥搞,設(shè)置blobColor=0選擇顏色更暗的斑點(diǎn)邮绿,blobColor=255選擇顏色更淺的斑點(diǎn)

? ?? ???2.?按大小:你可以通過(guò)設(shè)置參數(shù)filterByArea=1以及minArea和maxArea的適當(dāng)值來(lái)根據(jù)大小過(guò)濾斑點(diǎn)攀例,例如船逮,設(shè)置minArea=100將過(guò)濾掉所有小于100像素的斑點(diǎn)

? ?? ???3. 按形狀:現(xiàn)在形狀有三種不同的參數(shù)

? ?? ?? ?? ???3.1?圓度:這只是測(cè)量斑點(diǎn)的圓形接近程度,例如正六邊形具有比正方形更高的圓度粤铭,要按照?qǐng)A度過(guò)濾挖胃,請(qǐng)?jiān)O(shè)置filterByCircularity=1然后為minCircularity和maxCircularity設(shè)置適當(dāng)?shù)闹怠?/p>

? ?? ?? ?? ???3.2?凸度:一張圖片勝過(guò)千言萬(wàn)語(yǔ),凸度定義為它的凸起區(qū)域或者凸包的面積“鸸撸現(xiàn)在酱鸭,形狀的凸形船體是完全包圍形狀的最緊密的凸性。由凸形過(guò)濾垛吗,設(shè)置filterByConvexity=1凹髓,然后設(shè)置0<= minConvexity<=1?和?maxConvexity<=1


? ?? ?? ?? ?? ???3.3?慣性比:不要讓這嚇到你。數(shù)學(xué)家經(jīng)常使用令人困惑的詞來(lái)形容非常簡(jiǎn)單的東西怯屉。所以你必須知道的是蔚舀,這可以測(cè)量形狀的長(zhǎng)度。例如蚀之,對(duì)于一個(gè)圓該值是1蝗敢,對(duì)于橢圓它是0和1之間,而對(duì)于線(xiàn)段為0足删。為了通過(guò)慣量比過(guò)濾寿谴,設(shè)定filterByInertia = 1,并設(shè)置0≤??minInertiaRatio <=1和maxInertiaRatio<=1失受。

如何設(shè)置SimpleBlobDetector參數(shù)

設(shè)置SimpleBlobDetector參數(shù)讶泰,接下來(lái)給大家舉一個(gè)例子

Python:

#設(shè)置SimpleBlodDetector參數(shù)

params = cv2.SimpleBlobDetector_Params()

#改變閾值

params.minThreshold =10

params.maxThreshold =200

#通過(guò)面積濾波

params.filterByArea =True

params.minArea =1500

#通過(guò)圓度濾波

params.filterByCircularity =True

params.minCircularity =0.1

#通過(guò)凸度濾波

params.filterByConvexity =True

params.minConvexity =0.87

#通過(guò)慣性比濾波

params.filterByInertia =True

params.minInertiaRatio =0.01

#創(chuàng)建一個(gè)檢測(cè)器并使用默認(rèn)參數(shù)

ver = (cv2.version).split(',')

ifint(ver[0]) <3:

? ? detector = cv2.SimpleBlobDetector(params)

else:

? ? detector = cv2.SimpleBlobDetector_create(params)


openCV【實(shí)踐系列】4——使用Opencv進(jìn)行斑點(diǎn)(blob)檢測(cè)

https://bbs.easyaiforum.cn/thread-675-1-1.html

(出處: 易學(xué)智能)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拂到,隨后出現(xiàn)的幾起案子痪署,更是在濱河造成了極大的恐慌,老刑警劉巖兄旬,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狼犯,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡领铐,警方通過(guò)查閱死者的電腦和手機(jī)悯森,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)绪撵,“玉大人瓢姻,你說(shuō)我怎么就攤上這事∫粽” “怎么了幻碱?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵绎狭,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我褥傍,道長(zhǎng)儡嘶,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任摔桦,我火速辦了婚禮社付,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘邻耕。我一直安慰自己,他們只是感情好燕鸽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布兄世。 她就那樣靜靜地躺著,像睡著了一般啊研。 火紅的嫁衣襯著肌膚如雪御滩。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天党远,我揣著相機(jī)與錄音削解,去河邊找鬼。 笑死沟娱,一個(gè)胖子當(dāng)著我的面吹牛氛驮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播济似,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼矫废,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了砰蠢?” 一聲冷哼從身側(cè)響起蓖扑,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎台舱,沒(méi)想到半個(gè)月后律杠,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡竞惋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年柜去,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碰声。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诡蜓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胰挑,到底是詐尸還是另有隱情蔓罚,我是刑警寧澤椿肩,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站豺谈,受9級(jí)特大地震影響郑象,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茬末,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一厂榛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丽惭,春花似錦击奶、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至换衬,卻和暖如春痰驱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瞳浦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工担映, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叫潦。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓蝇完,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親诅挑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子四敞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355