顶帽运算,又被称为礼帽运算,是原图像与开运算结果图之差,数学表达式是:
dst = tophat(src, element) = src - open(src, element)
因为开运算带来的结果是放大了裂缝或者局部低亮度的区域,因此从原图中减去开运算后的图,得到的效果图突出了比原图轮廓周围的区域更加明亮的区域,且这一操作与选择的核的大小相关。
顶帽操作常用来分离比邻近点亮一些的斑块。当一幅图像具有大幅的背景,而微小物体比较有规律的情况下,可以使用顶帽运算进行背景提取。
代码示例:
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>
using namespace std;
using namespace cv;
int main() {
Mat srcImage;
srcImage = imread("/Users/dwz/Desktop/cpp/b.jpg");
Mat element;
element = getStructuringElement(MORPH_RECT, Size(5, 5));
Mat dstImage;
// 第一种实现方法
morphologyEx(srcImage, dstImage, MORPH_TOPHAT, element);
imwrite("tophat.jpg", dstImage);
return 0;
}
输入:
输出: