1.11【OpenCV圖像處理】形態學操作

開、閉、梯度、頂帽、黑帽、morphologyEx

1.11.1 開、閉、梯度、頂帽、黑帽

(1)開操作(open):先腐蝕後膨脹。

作用:可以去掉小的白噪點,填充小的白洞。能排除小區域物體、消除孤立點、去噪、平滑物體的輪廓。

Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1)); //結構元素nmorphologyEx(src, dst1, CV_MOP_OPEN, kernel); //開操作,先腐蝕後膨脹n

如下假設對象是前景色,背景是黑色,腐蝕可把小白點去掉,膨脹又把主對象被腐蝕掉的部分還原回來。

(2)閉操作(close):先膨脹後腐蝕(bin2)

作用:可以填充小的黑洞(fill hole補洞),去掉小的黑噪點。填充目標區域內的離散小空洞和分散部分。

morphologyEx(src, dst2, CV_MOP_CLOSE, kernel); //閉操作,先膨脹後腐蝕n如下假設對象是前景色,背景是黑色n

(3)形態學梯度(Gradient):膨脹減去腐蝕,又稱為基本梯度,沒進一階像素值不一樣

作用:邊緣提取,對二值圖像進行這一操作,可以將團塊(blob)的邊緣突出出來,保留物體的邊緣輪廓。

morphologyEx(src, dst3, CV_MOP_GRADIENT, kernel); //梯度,膨脹減腐蝕,邊緣提取n

其它還有內部梯度(原圖減去腐蝕)、外部梯度(膨脹減去原圖)、方向梯度(x方向和y方向進行計算)

(4)頂帽(top hat):是原圖像與開操作之間的差值圖像

作用:顯示開操作所去掉的小白噪點。

morphologyEx(src, dst4, CV_MOP_TOPHAT, kernel); //頂帽,原圖與開操作之差

(5)黑帽(black hat):閉操作圖像與源圖像的差值圖像

作用:顯示閉操作所填充的小黑洞。

morphologyEx(src, dst5, CV_MOP_BLACKHAT, kernel); //黑帽,閉操作與原圖之差n

1.11.2 相關API

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


完整程序:

/*1.11 形態學操作-開、閉、梯度、頂帽、黑帽*/n#include <opencv2/opencv.hpp>n#include <iostream> n#include <math.h>nusing namespace cv; //使用cv命名空間nnint main(int argc, char** argv) { //argc 表示命令行輸入參數的個數(以空白符分隔),argv中存儲了所有的命令行參數nMat src, dst1, dst2, dst3, dst4, dst5;n src = imread("E:/OpenCV/testimage/gray1.jpg");nif (src.empty()) {n printf("could not load image...n");nreturn -1;n }n namedWindow("input image", CV_WINDOW_AUTOSIZE);n imshow("input image", src);nnMat kernel = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));n morphologyEx(src, dst1, CV_MOP_OPEN, kernel); //開操作,先腐蝕後膨脹n imshow("open image", dst1);nn morphologyEx(src, dst2, CV_MOP_CLOSE, kernel); //閉操作,先膨脹後腐蝕n imshow("close image", dst2);nn morphologyEx(src, dst3, CV_MOP_GRADIENT, kernel); //梯度,膨脹減腐蝕,邊緣提取n imshow("gradient image", dst3);nn morphologyEx(src, dst4, CV_MOP_TOPHAT, kernel); //頂帽,原圖與開操作之差n imshow("tophat image", dst4);nn morphologyEx(src, dst5, CV_MOP_BLACKHAT, kernel); //黑帽,閉操作與原圖之差n imshow("blackhat image", dst5);nn waitKey(0);nreturn 0;n}n

運行結果:

原圖1:gray1

原圖2:gray3 黑背景

原圖2取反:~gray3 白背景

推薦閱讀:

視覺演算法研發工程師/嵌入式AI全棧(實習/全棧)(20K-40K/月)
Neural Artistic Style
1.15【OpenCV圖像處理】自定義線性濾波
[轉自github]基於深度學習的醫療影像論文匯總(Deep Learning Papers on Medical Image Analysis)
《SegNet: A Deep ConvolutionalnEncoder-Decoder Architecture for ImagenSegmentation》論文筆記

TAG:OpenCV | 图像处理 | 计算机视觉 |