OpenCV黑帽运算(BLACKHAT)的使用
作者:翟天保Steven 发布时间:2022-11-11 22:32:00
标签:OpenCV,黑帽运算
原理
形态学是图像处理中常见的名词,图像处理的形态学基本属于数学形态学的范畴,是一门建立在格论和拓扑学基础上的图像分析学科。黑帽运算是结合了腐蚀和膨胀的一种运算,闭运算结果图减原图。
简单来说,黑帽运算就是将闭运算后的图像减去原图,突出了比原图轮廓周围区域更暗的区域。效果图见下方图1图2。
函数原型
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 = morphologyDefaultBorderValue() );
其中op=MORPH_BLACKHAT
参数说明
InputArray类型的src,输入图像,如Mat类型。
OutputArray类型的dst,输出图像。
int类型的op,选择不同的运算操作,黑帽运算则是MORPH_BLACKHAT。
Point类型的anchor,锚点。默认值(-1,-1),表示位于单位中心,一般不用。
int类型的iterations,迭代使用的次数,默认值为1。
int类型的borderType,推断图像外部像素的边界模式,我OpenCV版本的默认值为BORDER_CONSTANT。如果图像边界需要扩展,则不同的模式下所扩展的像素,其生成原则不同。
const Scalar&类型的borderValue,当边界为常数时的边界值,默认值为morphologyDefaultBorderValue()。
测试代码
#include<iostream>
#include<opencv2/opencv.hpp>
#include<ctime>
using namespace std;
using namespace cv;
int main(void)
{
cv::Mat test = cv::Mat::zeros(64, 64, CV_8UC1);
cv::rectangle(test, cv::Rect(30, 30, 8, 8), 255, -1);
cv::rectangle(test, cv::Rect(33, 30, 2, 2), 0, -1);
cv::Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));
cv::Mat result, close;
cv::morphologyEx(test, close, MORPH_CLOSE, element);
cv::morphologyEx(test, result, MORPH_BLACKHAT, element);
imshow("original", test);
imshow("close", close);
imshow("result", result);
waitKey(0);
system("pause");
return 0;
}
测试效果
如上图所示,有原先8*8的矩形,有一个2*2的凹处,我设置了3*3的矩形蒙版,对其进行闭运算操作如图2所示,凹进消失,对其进行黑帽操作如图3所示,突出了凹进的内容。
来源:https://blog.csdn.net/zhaitianbao/article/details/117214281


猜你喜欢
- 原问题是这样的:如何用SQL语句(不是Oracle),求出下表每一行的5个字段中的最大值,最后生成一个新字段。例如:第一行最大值 -5.0
- 滑动窗口算法是一种可以高效解决数组问题的算法。它通过维护一个固定大小的滑动窗口,来快速计算某些数组的相关指标或者求解一些特定的问题。这种算法
- 在后端有许多的封装方法来截取字符串或者对字符串的操作,同样前端也有相应的方法。有一个data数据为ipaddrdata() {
- SQLServer中有五种约束,Primary Key约束、Foreign Key约束、Unique约束、Default约束和Check约束
- 在操作系统的文件中,还存在着一种我们可以自己定义的文件属性。这些属性不是保存在文件内容中,也不是直接可以通过 ls -al 所能看到的内容。
- 如果在session级保存一个dictionary对象会降低系统的性能,而在application级保存一个dictionary对象会导致w
- 框架thinkphp 版本:3.2.3 内容:数据库操作1. 多表查找一条数据M('a表')->join("
- 一 引入解释器在执行到定义变量的语法时,会申请内存空间来存放变量的值,而内存的容量是有限的,这就涉及到变量值所占用内存空间的回收问题,当一个
- 摘要:本篇博客将详细介绍如何使用YOLOv5进行车牌识别模型的训练与评估。我们将搭建训练环境、准备数据、配置模型参数、启动训练过程,以及使用
- 前言适用于python2和python31. loads方法与load方法的异同在Python中json是一个非常常用的模块,这个主要有4个
- 一般在卸载完数据库时,大家都希望能够将注册表信息完全删干净,下面就将教您彻底删除SQL Server注册表的方法,供您参考。在卸载SQL S
- 前言在使用Python进行网络编程或者爬取一些自己感兴趣的东西时,总避免不了进行一些数据传输、存取等问题,Python的文件对象以及其他扩展
- 项目进行到和服务器交互,通过post访问服务器端jsp,jsp访问服务器端mysql数据库,最终返回到客户端的中文出现乱码问题。在整个流程中
- 作者:做梦的人(小姐姐)出处:https://www.cnblogs.com/chongyou/因为最近在做平台,发现有同事,使用djang
- 一、前言python的两个单元测试包分别是 doctest 和 unittest,这两个包的使用起来各有长处,适用于不同的场景doctest
- 今天网页调试的时候在线订单出现错误:Server 对象 错误 'ASP 0178
- 神经网络只是由两个或多个线性网络层叠加,并不能学到新的东西,简单地堆叠网络层,不经过非线性激活函数激活,学到的仍然是线性关系。但是加入激活函
- 目录正文开始1. DRF 中的限流2. 限流进阶配置3. 限流思路分析4. 源码分析5. 其它注意事项参考资料正文开始先说一个限流这个概念,
- Some readers have asked to me what
- 前言:在开发中经常会与时间打交道,如:获取事件戳,时间戳的格式化等,这里简要记录一下python操作时间的方法。python中常见的处理时间