1. 程式人生 > >opencv 刪除二值化影象中面積較小的連通域

opencv 刪除二值化影象中面積較小的連通域

對於上圖的二值化影象,要去除左下角和右上角的噪點,方法:使用opencv去掉黑色面積較小的連通域。

程式碼


 
分析:對於上圖來說連通域共有:

這麼七個,我們的目標是去除2號和3號連通域,

程式中語句 tmparea = fabs(cvContourArea(contour));可以得到當前連通域的面積,當此面積小於閾值時對其填充為白色。

rect = cvBoundingRect(contour,0); 得到的是框住連通域的最小矩形,對矩形中的黑色部分將其填充為白色,但是這樣的話,連通域6和4兩個連通域被填充成了白色的矩形,這顯然不符合我們的要求,這樣就要判斷此連通域是黑色聯通域還是白色連通域,採用的方法是測試矩形的中心點,如果其為黑色,則認為此連通域是黑色連通域,否則為白色聯通域,對於黑色聯通域我們對其進行白色填充處理,對於白色聯通域則保持不變。