【OpenCv • c++】形态学技术操作 —— 顶帽操作与黑帽操作

news2024/12/23 11:14:01

  • 🚀 个人简介:CSDN「博客新星」TOP 10 , C/C++ 领域新星创作者
  • 💟 作    者:锡兰_CC ❣️
  • 📝 专    栏:【OpenCV • c++】计算机视觉
  • 🌈 若有帮助,还请关注➕点赞➕收藏,不行的话我再努努力💪💪💪

文章目录

    • 前言
    • 顶帽操作
      • 参考代码
    • 黑帽操作
      • 参考代码

前言

  在上一篇文章中,我们了解了开运算与闭运算,今天我们继续学习形态学技术操作里面的顶帽操作与黑帽操作。

顶帽操作

   Q:什么是顶帽操作?
   A: 我们将计算原图像与开运算结果图之差的操作称为顶帽操作。形态学顶帽变换是常用的一种形态学滤波器,具有高通滤波器的某部分特性,可实现在图像中检测出周围亮结构。顶帽操作常用于检测图像中的峰结构。

参考代码

void morphologyEx(
	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>
using namespace std;
using namespace cv;


int main() {
	cv::Mat srcImage = cv::imread("...c.jpg");
	if (!srcImage.data)
		return 1;
	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);
	return 0;
}

在这里插入图片描述   开运算可以消除暗背景下的较亮区域,如果用原图减去开运算结果就可以得到原图中灰度较亮的区域,顶帽操作因此也称为白顶帽变换。它还有一个很重要的作用,就是校正不均匀光照。

黑帽操作

   Q:什么是黑帽操作?
   A: 我们将计算原图像与闭运算结果图之差的操作称为黑帽操作。形态学黑帽变换是常用的一种形态学滤波器,具有高通滤波器的某部分特性,可实现在图像中检测出周围背景暗结构。黑帽操作常用于检测图像中的波谷结构。

参考代码

void morphologyEx(
	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>
using namespace std;
using namespace cv;


int main() {
	cv::Mat srcImage = cv::imread("...c.jpg");
	if (!srcImage.data)
		return 1;
	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);
	return 0;
}

在这里插入图片描述   闭运算可以删除亮度较高背景下的较暗区域,如果用原图减去闭运算结果就可以得到原图中灰度较暗的区域,黑帽操作因此也称为黑底帽变换。

其他

更多专栏订阅:

  • 👍 【开卷数据结构】
  • 💛 【备战蓝桥,冲击省一】
  • 💕   从零开始的 c++ 之旅
  • 💖 【OpenCV • c++】计算机视觉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/550146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ae 入门系列之十一:抠像

抠像&#xff0c;英文为 Keying&#xff0c;故也被称为“键控”。在早期电视节目制作中&#xff0c;意思是吸取画面中的某一颜色并使得此颜色相关区域成为透明&#xff0c;从而保留所需要的内容。 我们通常称要抠出&#xff08;要保留&#xff09;的主体为前景 Foreground&…

进程间通信-管道

文章目录 1. 进程间通信介绍1.1 进程间通信目的1.2 进程间通信分类 2. 管道2.1 什么是管道2.2 站在文件描述符角度-深度理解管道2.2.1 具体通信的过程 2.3 匿名管道2.4 代码实现 3. 进程控制4. 管道读写规则5. 管道特点6. 命名管道6.1 创建一个命名管道6.2 代码实现 1. 进程间通…

索引的底层数据结构,讲讲B+ 树,B树

B 树的变种。 B树&#xff1a;所有节点&#xff08;非叶子节点 叶子节点&#xff09;&#xff0c;都存储真正的行数据&#xff0c;所以一个数据页能存储的数量&#xff0c;相较于 B 树&#xff0c;就少很多。 B 树&#xff1a; ● 只有叶子节点存储具体的行数据&#xff0c;非…

【进阶】C 语言表驱动法编程原理与实践

数据压倒一切。如果选择了正确的数据结构并把一切组织的井井有条&#xff0c;正确的算法就不言自明。编程的核心是数据结构&#xff0c;而不是算法。——Rob Pike 目录 说明 概念提出 查表方式 直接查找 索引查找 分段查找 实战示例 字符统计 月天校验 名称构造 值名…

Python——sentenceSimilarity 的简单demo(测试句子相似度)

一、sentenceSimilarity 是什么&#xff1f; sentenceSimilarity 属于机器学习的领域 Python 中的 sentenceSimilarity 库是一个用于计算句子相似度的工具库&#xff0c;主要用于自然语言处理相关的应用中。该库支持多种模型计算句子相似度&#xff0c;包括 TF-IDF、LSI、LDA 等…

MySQL进阶篇(三)

七.MySQL管理 7.1 系统数据库 Mysql数据库安装完成后&#xff0c;自带了一下四个数据库&#xff0c;具体作用如下&#xff1a; 7.2 常用工具 7.2.1 mysql 该mysql不是指mysql服务&#xff0c;而是指mysql的客户端工具。 -e选项可以在Mysql客户端执行SQL语句&#xff0c;而…

【Linux】Linux环境基础开发工具使用(yum和vim)

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;Linux ⭐代码仓库&#xff1a;Linux 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们的支持是我…

NSFW 图片分类

NSFW指的是 不适宜工作场所&#xff08;“Not Safe (or Suitable) For Work;”&#xff09;。在本文中&#xff0c;将介绍如何创建一个检测NSFW图像的图像分类模型。 数据集 由于数据集的性质&#xff0c;我们无法从一些数据集的网站(如Kaggle等)获得所有图像。 但是我们找到…

少儿编程 中国电子学会图形化编程等级考试Scratch编程四级真题解析(选择题)2023年3月

2023年3月scratch编程等级考试四级真题 选择题(共25题,每题2分,共50分) 1、编写一段程序,从26个英文字母中,随机选出10个加入列表a。空白处应填入的代码是 A、 B、 C、 D、 答案:C

[CTF/网络安全] 攻防世界 simple_php 解题详析

[CTF/网络安全] 攻防世界 simple_php 解题详析 代码解读PHP弱语言特性姿势参数a限制绕过参数b限制绕过 总结 题目描述&#xff1a;小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。 代码解读 $a$_GET[a]; 从HTTP GET请求参数中获取一个名为a的变量&#xff0c…

协同过滤算法的召回率、准确率、覆盖率、新颖度

python版计算协同过滤推荐算法的召回率、准确率、覆盖率、新颖度 推荐算法网站示例Demo 点我跳转图书管理推荐系统 点我跳转课程推荐系统 点我跳转电影推荐系统 1、召回率、准确率 2、覆盖率、新颖度 覆盖率反映了推荐算法发掘长尾的能力,覆盖率越高,说明推荐算法越能够将…

ChatGPT开始颠覆学习方式,应试教育面临哪些挑战?

ChatGPT爆火几个月&#xff0c;整个教育系统都在被颠覆。全球范围内&#xff0c;不少大学教授、系主任和管理人员&#xff0c;都在对课堂进行大规模的调整&#xff0c;以应对ChatGPT对教学活动造成的巨大冲击。 国内传统应试教育选出的分霸、考霸&#xff0c;是更能吃苦&#…

c++中的方法

c中的方法 static方法 与数据成员类似&#xff0c;方法有时会应用于全部对象而不是单个对象。可以编写static方法和数据成员。在方法声明前加上static即可。对于方法的定义前则不需要重复使用static关键字。 class Foo { public:static int sumFunc(int a, int b); };int Fo…

康耐视Visionpro工具-CogPMAlignTool为什么是最牛工具?

1.算法:有六种选项,分别是:PatMax,PatQuick, PatMax 与 PatQuick, PatFlex,PatMax-高灵敏度,透视 Patmax。 PatQuick 特点:速度最快,对于三维或者低质量原件最佳,承受更多图像差异; PatMax 特点:精确度最高,在二维元件上表现佳,最适合于细微细节; PatFlex 特点…

4. 通讯录实现的需求分析和架构设计

本文实现的是通讯录产品的需求分析和架构设计&#xff0c;重点在于结构层次的设计&#xff0c;方便代码阅读和维护。 一、通讯录实现的需求分析 1、通讯录的功能清单 添加一个人员打印显示所有人员删除一个人员查找一个人员保存文件加载文件 2&#xff0c;数据存储信息 人员…

[CTF/网络安全] 攻防世界 disabled_button 解题详析

[CTF/网络安全] 攻防世界 disabled_button 解题详析 input标签姿势disable属性总结 题目描述&#xff1a;X老师今天上课讲了前端知识&#xff0c;然后给了大家一个不能按的按钮&#xff0c;小宁惊奇地发现这个按钮按不下去&#xff0c;到底怎么才能按下去呢&#xff1f; input标…

Tiny+ 语言词法之C语言

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 语义分析本质上就是在语法分析的基础上进一步完善分析的功能。举个例子来说&#xff0c;在语法分析部分的 if_stmt 函数中&#xff0c;在语义上判断条件必须返回布尔类型的值&#xff0c;因此我们加入一个判断&#xff0c;判断…

Unity之OpenXR+XR Interaction Toolkit示例Demo详解

一.前言 自从升级Unity版本到2021,然后使用OpenXR开发VR之后,我们整个团队的开发效率都提升了不少,这证明了不管什么领域,统一接口,统一规范都是必须的。 关于XR Interaction Toolkit插件,我已经写了几篇文章了,今天才想起来,最基础的Demo讲解还没有写,其实官方的这个…

chatgpt赋能Python-pythonfor循环5次

Python中for循环的使用方法及技巧 Python作为一种高级编程语言&#xff0c;其独特的语法结构和方便的操作方法受到了越来越多人的欢迎和喜爱。其中&#xff0c;for循环是Python程序员必备的基本技巧之一。在这篇文章中&#xff0c;我们将介绍Python中for循环的使用方法及技巧。…

HTTP协议【面试高频考点】

目录 一、HTTP 响应 1.首行 2.状态码&#xff08;经典面试题&#xff0c;必考&#xff09; 2.1 200 OK 2.2 404 Not Found 2.3 403 Forbidden 2.4 500 Internal Server Error 2.5 504 Gateway Timeout 2.6 302 Move temporarily 2.7 301 Moved Permanently 2.8 状态…