泛洪填充(Flood Fill)很多時候國內的開發(fā)者稱它為漫水填充,該算法在圖形填充與著色應用程序比較常見,屬于標配。在圖像處理里對二值圖像的Hole可以通過泛洪填充來消除,這個是泛洪填充在圖像處理中很經典的一個用途,此外還可以通過泛洪填充為ROI區(qū)域著色。這個在圖像處理也經常用到。讓我們首先看一下泛洪填充算法本身,然后再說一下在圖像處理中的應用場景。
泛洪填充算法
通常泛洪填充需要從一個點開始,這個點可以隨機選擇的一點,但是一定要在填充區(qū)域內部,然后它就會進行四鄰域或者把鄰域尋找對周圍像素完成填充,直到遇到跟指定隨機點像素值不同的像素為止,也可以認為是到達了區(qū)域邊界。通過鄰域像素尋找實現填充速度比較慢、不是泛洪填充好的實現方式,最常見與快速的泛紅實現是基于掃描線算法的,步驟如下:
1.首先從開始點出發(fā)進行垂直方向列的掃描,填充
2.然后以填充點開始進行每一行的掃描與填充
3.繼續(xù)以每一行新填充的像素為開始點,執(zhí)行1,2步驟
4.直到區(qū)域所有點都完成填充為止。
圖示如下:
第一步:假設有圖像如下,紅色表種子像素點。

首先進行豎直方向的掃描,填充結果如下:

然后以填充的紅色像素為起始點,開始水平方向的掃描填充,結果如下:

用水平方向被填充像素點為種子像素點,繼續(xù)豎直方式掃描填充,結果如下:

以填充的像素點為種子像素點繼續(xù)水平方向掃描,結果如下:

這樣就完成了對整個區(qū)域的填充。從上面的例子可以看出,泛洪填充可以通過遞歸方式編碼實現,但是基于遞歸方式編碼實現有個致命的缺點,對大圖填充時候容易導致棧溢出,所以更常用的基于隊列或者棧的數據結構實現非遞歸的泛洪填充。OpenCV中的實現主要是基于棧的掃描線算法實現泛洪填充。
應用場景一:
通過泛洪填充算法實現對二值圖像對象區(qū)域中Hole填充
運行顯示原圖如下:

填充以后結果如下:

實現代碼如下:

應用場景二:
通過泛洪填充實現對ROI區(qū)域的著色, 跟上個例子使用API唯一不同地方是帶了mask參數。運行結果如下:

實現代碼如下:

編輯:jq
-
API
+關注
關注
2文章
2371瀏覽量
66775 -
OpenCV
+關注
關注
33文章
652瀏覽量
44799 -
泛洪算法
+關注
關注
0文章
2瀏覽量
1418
原文標題:OpenCV中泛洪填充算法解析與應用
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
沒有專利的opencv-python 版本
為什么工業(yè)網絡必須啟用 IGMP Snooping?一文講清關鍵原理
SM4算法實現分享(一)算法原理
MD5信息摘要算法實現一(基于蜂鳥E203協(xié)處理器)
【開發(fā)實例】基于GM-3568JHF開發(fā)板安裝OpenCV并使用視頻目標跟蹤 ( CamShift)
零成本鋼鐵俠手套!樹莓派+OpenCV 秒變手勢遙控器!
如何使用樹莓派與OpenCV實現面部和運動追蹤的云臺系統(tǒng)?
鋰離子電池電解質填充工藝:技術原理與創(chuàng)新實踐
【GM-3568JHF開發(fā)板免費體驗】OpenCV 視頻目標跟蹤 ( CamShift)
【Milk-V Duo S 開發(fā)板免費體驗】SDK編譯、人臉檢測、OpenCV測試
蘋果手機應用到底部填充膠的關鍵部位有哪些?
溝槽填充技術介紹
芯片底部填充膠填充不飽滿或滲透困難原因分析及解決方案
一文解析OpenCV中泛洪填充算法與應用
評論