一、對於二值圖,0代表黑色,255代表白色。去除小連通區域與孔洞,小連通區域用8鄰域,孔洞用4鄰域。
函式名字為:void removesmallregion(mat &src, mat &dst,int arealimit, int checkmode, int neihbormode)
checkmode: 0代表去除黑區域,1代表去除白區域; neihbormode:0代表4鄰域,1代表8鄰域;
如果去除小連通區域checkmode=1,neihbormode=1去除孔洞checkmode=0,neihbormode=0
記錄每個畫素點檢驗狀態的標籤,0代表未檢查,1代表正在檢查,2代表檢查不合格(需要反轉顏色),3代表檢查合格或不需檢查 。
1.先對整個影象掃瞄,如果是去除小連通區域,則將黑色的背景圖作為合格,畫素值標記為3,
如果是去除孔洞,則將白色的色素點作為合格,畫素值標記為3。
2.掃面整個影象,對影象進行處理。
[cpp]view plain
copy
void
removesmallregion(mat &src, mat &dst,
intarealimit,
intcheckmode,
intneihbormode)
} } }
else
//去除孔洞,黑色點畫素
} } }
vectorneihborpos;//將鄰域壓進容器
neihborpos.push_back(point2i(-1, 0));
neihborpos.push_back(point2i(1, 0));
neihborpos.push_back(point2i(0, -1));
neihborpos.push_back(point2i(0, 1));
if(neihbormode == 1)
else
cout <
"neighbor mode: 4鄰域."
<
intneihborcount = 4 + 4 * neihbormode;
intcurrx = 0, curry = 0;
//開始檢測
for(
inti = 0; i
} } }
if(growbuffer.size()>arealimit)
//判斷結果(是否超出限定的大小),1為未超出,2為超出
checkresult = 2;
else
for(int
z = 0; z
//********結束該點處的檢查**********
} }
} checkmode = 255 * (1 - checkmode);
//開始反轉面積過小的區域
for(
inti = 0; i
else
if(pointlabel.at(i, j) == 3)
} } cout <
<
}
呼叫函式:dst是原來的二值圖。
和之前的影象相比
matlab去除大面積連通區域
在利用進行影象形態學處理的時候,經常需要去除面積較大或面積較小的連通區域。對於去除面積較小的連通區域,matlab提供了現有的函式 bw2 bwareaopen bw,p,conn 刪除二值影象bw中面積小於p的物件,預設情況下conn使用8鄰域可是matlab並沒有去除面積較大連通區域的函式,當然...
opencv學習 去除干擾線
操作步驟 1.讀取彩色影象,imread 2.轉換為灰度影象,cvtcolor src,dst,cv bgr2gray 3.轉換為二值影象,adaptivethreshold 4,定義結構元素,getstructuringelement 5,形態學操作 如下 include includeusing...
PS小實驗 去除水印
ps小實驗 去除水印 個人覺得用photoshop是最好的去水印工具,如果是單色背景,直接用橡皮擦工具就可以完成去除水印的工作,但有時背景色並不是那麼純,而是方向性對稱,比如這張 強烈推薦ps的塗抹工具!它的靈感來自於油畫 未乾的油畫可以用手指塗抹來覆蓋顏色。所以在這張圖中可以從每個水品方向上塗抹,...