FloodFill 漫水填充)演算法

2021-05-23 09:23:10 字數 792 閱讀 7921

在opencv裡有乙個函式,為cvfloodfill(iplimage* img, cvpoint seedpoint, cvscalar newval,

cvscalar lodiff=cvscalarall(0), cvscalar updiff=cvscalarall(0), cvconnectedcomp* com=null,

int flags=4, cvarr* mask = null)

其中各引數的意義為:img指輸入影象, seedpoint指種子畫素座標,newval指用來填充區域的新顏色,lodiff和updiff分別指與種子畫素的值的上下差值。而com指填充的 聯通域資訊指標,其成員變數包括面積大小和平均顏色等資訊。flags是關鍵引數,它包含了填充的幾種方式選擇,如鄰哉是4聯通還是8聯通,是否只填充掩 碼矩陣,以及掩碼矩陣的掩碼值(預設為1)

mask為掩碼矩陣,它是即是乙個輸入引數也是乙個輸出引數。mask作為輸入時只有掩碼值為0的畫素點有效,而輸出時有填充的畫素的座標點上也相應的被掩碼(掩碼值由flags決定,預設為1)

對於此函式所用的演算法,並沒有仔細去分析它的**。而是認識了兩種比較簡單的演算法。分別如下:

演算法一:遞迴演算法

void floodfill(int x, int y, int fill, int old)}

8鄰域的填充過種也是一樣,此演算法的過程簡單易懂,效率也較高,但由於函式的反覆呼叫會使作業系統的棧溢位。

演算法二:基於行一致性的演算法

(1)將種子點入棧;

while(棧非空)

此演算法的缺點是會造成很多點的重複訪問。

漫水填充演算法

所謂漫水填充演算法,是給定乙個聯通域內的乙個點,以此為起點找到這個聯通域的其餘所有點並將其填充為指定顏色的一種演算法。之所以稱之為漫水填充,是因為這種演算法就是模擬了漲水的過程,從一點開始,水流慢慢加大,直到漫過了全部區域。這個演算法的詳細介紹可以參考下面的鏈結。這個演算法在我們尋找一片指定區域時非...

漫水填充演算法

漫水填充演算法是填充演算法中最通用的演算法。所謂漫水填充 演算法,是給定乙個聯通域內的乙個點,以此為起點找到這個聯通域的其餘所有點並將其填充為指定顏色的一種演算法。之所以稱之為漫水填充,是因為這種演算法就是模擬了漲水的過程,從一點開始,水流慢慢加大,直到漫過了全部區域。該填充演算法的原型如下所示 v...

漫水填充演算法

1 基於掃瞄線實現的泛洪填充演算法的主要思想是根據當前輸入的點p x,y 沿y方向分別向上與向下掃瞄填充,同時向左p x 1,y 與向右p x 1,y 遞迴尋找新的掃瞄線,直到遞迴結束。2 row height point.y col width point.x 3 這裡要注意image.at i,...