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)、形態學操作