OpenCV實現漫水填充(待完善)

2021-08-05 19:18:43 字數 2566 閱讀 6821

opencv實現漫水填充(待完善)

定理:用一種特定的顏色填充連通區域,通過設定可聯通畫素的上下限以及連通方式來達到不同的填充效果的方法。

自動選中和種子相連的區域,接著將該區域替換成指定的顏色。也可以用來從輸入影象獲取掩碼區域,掩碼區域會加速區域,或只處理掩碼指定的畫素點。

函式呼叫:

int floodfill(inputoutputarray image, point seedpoint, scalar newval, rect* rect=0, scalar lodiff=scalar(), scalar updiff=scalar(), int flags=4 )
或者

int floodfill(inputoutputarray image, inputoutputarray mask, point seedpoint,scalar newval, rect* rect=0, scalar lodiff=scalar(), scalar updiff=scalar(), int flags=4 )
引數詳解:

除了第二個引數外,其他的引數都是共用的。

演算法實現:

掃瞄線種子填充演算法的基本過程如下:當給定種子點(x, y)時,首先分別向左和向右兩個方向填充種子點所在掃瞄線上的位於給定區域的乙個區段,同時記下這個區段的範圍[xleft, xright],然後確定與這一區段相連通的上、下兩條掃瞄線上位於給定區域內的區段,並依次儲存下來。反覆這個過程,直到填充結束。

掃瞄線種子填充演算法可由下列四個步驟實現:

(1) 初始化乙個空的棧用於存放種子點,將種子點(x, y)入棧;

(2) 判斷棧是否為空,如果棧為空則結束演算法,否則取出棧頂元素作為當前掃瞄線的種子點(x, y),y是當前的掃瞄線;

(3) 從種子點(x, y)出發,沿當前掃瞄線向左、右兩個方向填充,直到邊界。分別標記區段的左、右端點座標為xleft和xright;

(4) 分別檢查與當前掃瞄線相鄰的y - 1和y + 1兩條掃瞄線在區間[xleft, xright]中的畫素,從xleft開始向xright方向搜尋,若存在非邊界且未填充的畫素點,則找出這些相鄰的畫素點中最右邊的乙個,並將其作為種子點壓入棧中,然後返回第(2)步;

實現**:

//實現漫水填充 在灰度圖的基礎上 彩色圖的色差不會計算 囧

//嘗試實現一下掃瞄填充法

void searchnewline(inputarray src,stack& stack, int xleft, int xright, int y, scalar seedpoint,scalar newval, scalar lodiff, scalar updiff);

void method_one(inputoutputarray src, point seedpoint, scalar newval, scalar lodiff, scalar updiff)

else

x--;

} x = current.x;//重新設定

//向右填充

while (x<=cols-1 )

else

else

}}

//掃瞄上一行

searchnewline(src,stack,xleft,xright,y-1,pointcurrent,newval,lodiff,updiff);

//掃瞄下一行

searchnewline(src,stack, xleft, xright, y +1,pointcurrent, newval, lodiff, updiff); }}

void searchnewline(inputarray src,stack& stack,int xleft,int xright,int y,scalar seedpoint,scalar newval,scalar lodiff,scalar updiff)

} else

}x++;

} //考慮邊界因素

if (flag)

return;

}int main()

實現效果:

結果相差較大,還需努力!!!如果有同道中人知道如何改進,還望給予指導!感激不盡!

opencv 漫水填充

一 話說漫水填充 漫水填充是一種用特定的顏色填充連通區域,通過設定可連通畫素的上下限以及連通方式達到不同的填充效果的方法。漫水填充經常用來標記或者是分離影象的一部分,以便對其進行進一步處理貨分析,也可以用來從輸入影象獲取掩碼區域,掩碼會加速處理過程,或者只處理指定的畫素點,操作的結果總是某個連續的區...

opencv漫水填充演算法

使用特定的顏色填充連通區域,通過設定可連通畫素的上下限以及連通方式達到不同的填充效果。int floodfill inputoutputarray image,point seedpoint,scalar newval,rect rect 0,scalar lodiff scalar scalar ...

Opencv學習 漫水填充演算法

一 漫水填充定義 漫水填充 flood fill 法是用特定的顏色填充聯通區域,通過設定可聯通畫素的上下限以及聯通方式來達到不同的填充效果的方法。主要用來標記和分離影象的一部分以便對其進一步處理和分析。也可以用來從輸入影象獲取掩碼區域,掩碼會加快處理過程,或只處理掩碼指定的畫素點。所謂漫水填充,簡單...