- 🚀 个人简介:CSDN「博客新星」TOP 10 , C/C++ 领域新星创作者
- 💟 作 者:锡兰_CC ❣️
- 📝 专 栏:【OpenCV • c++】计算机视觉
- 🌈 若有帮助,还请关注➕点赞➕收藏,不行的话我再努努力💪💪💪
文章目录
前言
在上一篇文章中,我们了解了开运算与闭运算,今天我们继续学习形态学技术操作里面的顶帽操作与黑帽操作。
顶帽操作
Q:****什么是顶帽操作?
A: 我们将计算原图像与开运算结果图之差的操作称为顶帽操作。形态学顶帽变换是常用的一种形态学滤波器,具有高通滤波器的某部分特性,可实现在图像中检测出周围亮结构。顶帽操作常用于检测图像中的峰结构。
参考代码
voidmorphologyEx(
InputArray src,
OutputArray dst,int op,
InputArray kernel,
Point anchor =Point(-1,-1),int iterations =1,int borderType = BORDER_CONSTANT,const Scalar&borderValue = morph -ologyDefaultBorderValue())
其中,
src
代表输入图像(二值图像或灰度图像),
dst
表示输出图像,
op
表示形态学操作算子类型,可以设置为
MORPH_OPEN
开操作,
MORPH_CLOSE
闭操作,
MORPH_GRADIENT
形态学梯度操作,
MORPH_TOPHAT
顶帽操作,
MORPH_BLACKHAT
黑帽操作,
iterations
可以选择对图像进行多次形态学运算,
borderValue
和
borderType
为可选参数设置,针对边界处理。
#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/types_c.h>#include<opencv2/imgproc.hpp>#include<iostream>usingnamespace std;usingnamespace cv;intmain(){
cv::Mat srcImage = cv::imread("...c.jpg");if(!srcImage.data)return1;
cv::Mat srcGray;cvtColor(srcImage, srcGray, CV_RGB2GRAY);// 定义结构元素
cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(15,15));
cv::Mat topHatMat, blackHatMat;// 形态学Top-Hat 顶帽
cv::morphologyEx(srcGray, topHatMat, cv::MORPH_TOPHAT, element);
cv::imshow("srcImage", srcImage);
cv::imshow("topHatMat", topHatMat);
cv::waitKey(0);return0;}
开运算可以消除暗背景下的较亮区域,如果用原图减去开运算结果就可以得到原图中灰度较亮的区域,顶帽操作因此也称为白顶帽变换。它还有一个很重要的作用,就是校正不均匀光照。
黑帽操作
Q:****什么是黑帽操作?
A: 我们将计算原图像与闭运算结果图之差的操作称为黑帽操作。形态学黑帽变换是常用的一种形态学滤波器,具有高通滤波器的某部分特性,可实现在图像中检测出周围背景暗结构。黑帽操作常用于检测图像中的波谷结构。
参考代码
voidmorphologyEx(
InputArray src,
OutputArray dst,int op,
InputArray kernel,
Point anchor =Point(-1,-1),int iterations =1,int borderType = BORDER_CONSTANT,const Scalar&borderValue = morph -ologyDefaultBorderValue())
其中,
src
代表输入图像(二值图像或灰度图像),
dst
表示输出图像,
op
表示形态学操作算子类型,可以设置为
MORPH_OPEN
开操作,
MORPH_CLOSE
闭操作,
MORPH_GRADIENT
形态学梯度操作,
MORPH_TOPHAT
顶帽操作,
MORPH_BLACKHAT
黑帽操作,
iterations
可以选择对图像进行多次形态学运算,
borderValue
和
borderType
为可选参数设置,针对边界处理。
#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/types_c.h>#include<opencv2/imgproc.hpp>#include<iostream>usingnamespace std;usingnamespace cv;intmain(){
cv::Mat srcImage = cv::imread("...c.jpg");if(!srcImage.data)return1;
cv::Mat srcGray;cvtColor(srcImage, srcGray, CV_RGB2GRAY);// 定义结构元素
cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(15,15));
cv::Mat topHatMat, blackHatMat;// 形态学Top-Hat 黑帽
cv::morphologyEx(srcGray, blackHatMat, cv::MORPH_BLACKHAT, element);
cv::imshow("srcImage", srcImage);
cv::imshow("blackHatMat", blackHatMat);
cv::waitKey(0);return0;}
闭运算可以删除亮度较高背景下的较暗区域,如果用原图减去闭运算结果就可以得到原图中灰度较暗的区域,黑帽操作因此也称为黑底帽变换。
其他:
更多专栏订阅:
- 👍 【开卷数据结构】
- 💛 【备战蓝桥,冲击省一】
- 💕 从零开始的 c++ 之旅
- 💖 【OpenCV • c++】计算机视觉
版权归原作者 锡兰_CC 所有, 如有侵权,请联系我们删除。