OpenCV(九)形态学操作4--礼帽与黑帽(顶帽与底帽)

365dots 2025-11-09 14:33:39 作者: admin 阅读: 5424
OpenCV(九)形态学操作4--礼帽与黑帽(顶帽与底帽)

目录

一、顶帽运算(礼帽)

二、底帽运算(黑帽)

三、底帽运算应用(二值图像底帽运算)

1、原图转灰度图,再转二值图像

2、灰度图底帽处理

3、二值图闭运算

代码

总代码

参考资料

一、顶帽运算(礼帽)

取出亮度高的地方

顶帽运算 = 原图像 - 开运算

开运算可以消除暗背景下的高亮区域,那么如果用原图减去开运算结果就可以得到原图中灰度较亮的区域,所以又称白顶帽变换。

C++:

//顶帽运算

void TopHat()

{

//开运算

Mat kernel = getStructuringElement(MORPH_RECT, Size(19, 19)); //创建结构元

// 矩形卷积核 尺寸为(19,19)宽高

morphologyEx(img, dst, MORPH_OPEN, kernel, Point(-1, -1)); // 形态学处理--开运算

// 原图 新图 开运算 卷积核 锚点

imshow("开运算", dst); // 显示形态学处理后的效果

//顶帽运算(白顶帽运算)

dst = img - dst;

//morphologyEx(img, dst, MORPH_TOPHAT, kernel, Point(-1, -1), 1); // 形态学处理--开帽变换

imshow("顶帽运算", dst);

}

python:

# 顶帽(原-开)

def TopHat():

tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, (7, 7), iterations=5)

# 类型 卷积核 迭代次数

cv2.imshow('TopHat', tophat)

二、底帽运算(黑帽)

取出亮度低的地方

底帽运算 = 原图像 - 闭运算

闭运算可以删除亮背景下的暗区域,那么用原图减去闭运算结果就可以得到原图像中灰度较暗的区域,所以又称黑底帽变换。

C++:

//底帽运算

void BlackHat()

{

//闭运算

Mat kernel = getStructuringElement(MORPH_RECT, Size(19, 19)); //创建结构元

// 矩形卷积核 尺寸为(19,19)宽高

morphologyEx(img, dst, MORPH_CLOSE, kernel, Point(-1, -1)); // 形态学处理--开运算

// 原图 新图 闭运算 卷积核 锚点

imshow("闭运算", dst); // 显示形态学处理后的效果

//底帽运算(黑帽运算)

//morphologyEx(img, dst, MORPH_BLACKHAT, kernel, Point(-1, -1), 1); // 形态学处理--底帽变换

dst = img - dst;

imshow("底帽运算", dst);

}

python:

# 底帽(原-闭)

def BlackHat():

blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, (7, 7), iterations=5)

#

相关推荐