opencv基礎_11(形態學操作)

1、開操作- open

(1)、開操作:就是先做腐蝕後再做膨脹。

(2)、作用是可以去掉圖像的中小的不想要的對象(假設對象是前景色,背景是黑色)。

腐蝕是把圖中小的白點去電,膨脹是把圖中大打矩形還原回來。

2、閉操作-close

(1)、閉操作:就是先做膨脹後再做腐蝕。

(2)、作用是可以填充小的洞(Fill hole)(可以填充小的洞(fill hole),假設對象是前景色,背景是黑色)。

通過閉操作,圖中的小黑洞被填充爲白色。先做膨脹可以把小黑洞填充,然後做腐蝕把其他還原回來。

3、形態學梯度- Morphological Gradient

(1)、形態學梯度:形態學梯度就是膨脹減去腐蝕。

(2)、又稱爲基本梯度(其它還包括-內部梯度、方向梯度)。

注意:1、內部梯度:內部梯度就是用原圖減去腐蝕圖,就是內部梯度。

            2、方向梯度:方向梯度就是X方向 和 Y 方向做一個梯度的的計算,得出來的圖就是方向梯度。

4、頂帽 – top hat

(1)、頂帽就 是原圖像與開操作之間的差值圖像。就是用原二值圖像 減去 開操作之後的圖像  得到頂帽圖像。

5、黑帽

(1)、黑帽就是是閉操作圖像與源圖像的差值圖像,就是用原二值圖像先做閉操作得到圖像,然後減去原二值圖像。

6、opencv做形態學操作的API

(1)、morphologyEx(src, dest, CV_MOP_BLACKHAT, kernel);

 - Mat src – 輸入圖像
 - Mat dest – 輸出結果
 - int OPT – CV_MOP_OPEN/ CV_MOP_CLOSE/ CV_MOP_GRADIENT / CV_MOP_TOPHAT/ CV_MOP_BLACKHAT 形態學操作類型
Mat kernel 結構元素
int Iteration 迭代次數,默認是1

7、代碼演示

int main(int argc, char** argv) 
{
    Mat src, dst;
    src = imread("D:/vcprojects/images/bin2.png");
    if (!src.data) 
    {
        printf("could not load image...\n");
    }

    namedWindow("input image", CV_WINDOW_AUTOSIZE);
    imshow("input image", src);
    char output_title[] = "morphology demo";
    namedWindow(output_title, CV_WINDOW_AUTOSIZE);

    Mat kernel = getStructuringElement(MORPH_RECT, Size(11, 11), Point(-1, -1));
    morphologyEx(src, dst, CV_MOP_BLACKHAT, kernel);
    imshow(output_title, dst);

    waitKey(0);

    return 0;
}

8、結果顯示

(1)、輸入圖像

(2)、形態學操作

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章