15、OpenCV形态学操作——Hit-or-Miss
OpenCV形态学操作——Hit-or-Miss
- 一、学习目标
- 二、Hit-or-Miss
一、学习目标
- 理解什么是Hit-or-Miss
- 学会在OpenCV中使用Hit-or-Miss
二、Hit-or-Miss
形态学算子根据图像的形状来处理图像。这些操作符将一个或多个结构化元素应用于输入图像以获得输出图像。腐蚀和膨胀是两种基本的形态学操作。这两个操作的组合可以产生高级形态学操作,如开运算、闭运算或顶帽、黑帽等。要了解更多关于这些和其他基本形态学操作的信息,请参阅前面的教程。
Hit-or-Miss操作对于在二值图像中寻找指定模式是很有用的。它能发现那些邻域像素匹配第一个结构元素B1的形状而同时不匹配第二个结构元素B2的形状的像素。从数学上讲,对图像A进行Hit-or-Miss的操作可以表示为:
因此,Hit-or-Miss操作包括三个步骤:
- 使用结构元素B1 腐蚀图像A
- 使用结构元素B2 腐蚀图像A的补,即AC
- 对步骤1和步骤2的结果进行AND操作
结构元素B1和B2可以组合成一个元素b。让我们看一个例子:
结构元素(内核)。左:'hit'内核。中间:'miss'内核。右边:最终的组合内核
在本例中,我们试图寻找一种模式,其中中心像素属于背景(-1),而中心像素的上下左右相邻的像素属于前景。其他邻域像素可以是任何类型的,我们不关心它们。现在,让我们把这个内核应用到输入图像上:
使用上述结构元素进行Hit-or-Miss操作后得到如下结果:
可以看到,该图像仅有一个符合模式的地方。
OpenCV中,使用函数cv::morphologyEx实现Hit-or-Miss操作,指定op参数为MORPH_HITMISS即可,函数在前面的教程中已经详细介绍过,此处不再赘述。
使用实例:
#include<opencv2/opencv.hpp>
using namespace cv;int main(int argc, char** argv)
{// 定义输入图像像素矩阵,0代表背景(黑色),255代表前景(白色)Mat input_image = (Mat_<uchar>(8, 8) <<0, 0, 0, 0, 0, 0, 0, 0,0, 255, 255, 255, 0, 0, 0, 255,0, 255, 255, 255, 0, 0, 0, 0,0, 255, 255, 255, 0, 255, 0, 0,0, 0, 255, 0, 0, 0, 0, 0,0, 0, 255, 0, 0, 255, 255,0,0, 255, 0, 255, 0, 0, 255,0,0, 255, 255, 255, 0, 0, 0, 0);// 自定义结构元素,0表示无关紧要,1表示匹配的前景元素,0表示匹配的背景元素Mat kernel = (Mat_<uchar>(3, 3) <<0, 1, 0,1, -1, 1,0, 1, 0);Mat output_image;// 调用API执行Hit-or-Miss操作,与其它形态学操作的调用方式类似morphologyEx(input_image, output_image, MORPH_HITMISS, kernel);const int rate = 50;// 将kernel同比扩大50倍后可视化,注意需要调用函数cpnvertTo转换数值类型即图像的深度depthkernel = (kernel + 1) * 127;kernel.convertTo(kernel, CV_8U);// 根据缩放比例调整图像大小resize(kernel, kernel, Size(), rate, rate, INTER_NEAREST);imshow("kernel", kernel);moveWindow("kernel", 0, 0);// 调整并可视化输入图像resize(input_image, input_image, Size(), rate, rate, INTER_NEAREST);imshow("Original", input_image);moveWindow("Original", 0, 200);// 调整并可视化输出图像resize(output_image, output_image, Size(), rate, rate, INTER_NEAREST);imshow("Hit or Miss", output_image);moveWindow("Hit or Miss", 500, 200);waitKey(0);system("pause");return EXIT_SUCCESS;
}
你也可以使用其它的结构元素,如:
15、OpenCV形态学操作——Hit-or-Miss相关推荐
- OpenCV形态学操作
OpenCV形态学操作 本文转载自:http://blog.csdn.net/byxdaz/article/details/5775717 一.图像腐蚀 膨胀 细化的基本原理 1.图像细化的基本原 ...
- OpenCV 形态学操作之腐蚀与膨胀,开运算与闭运算,顶帽与黑帽,图像梯度运算相关知识点回顾
Python OpenCV 365 天学习计划,与橡皮擦一起进入图像领域吧.本篇博客是这个系列的第 45 篇. 该系列文章导航参考:https://blog.csdn.net/hihell/categ ...
- OpenCV 形态学操作应用——提取水平与垂直线
文章目录 原理方法 提取步骤 输入图像彩色图像 `imread` 转换为灰度图像 – `cvtColor` 转换为二值图像 – `adaptiveThreshold` 定义结构元素: 开操作 (腐蚀+ ...
- OpenCV 形态学操作
形态学,即数学形态学(Mathematical Morphology),是图像处理过程中一个非常重要的研究方向.形态学主要从图像内提取分量信息,该分量信息通常对于表达和描绘图像的形状具有重要意义,通常 ...
- opencv 形态学操作(python)
形态学操作 形态学操作 腐蚀 膨胀 通用形态学函数 开运算 闭运算 形态学梯度运算 礼帽运算 黑帽运算 核函数 形态学操作 形态学,即数学形态学(Mathematical Morphology),是图 ...
- C++ OpenCV形态学操作--开闭操作,形态学梯度,顶帽,黑帽
https://my.oschina.net/u/4582134/blog/4582844
- OpenCV(八)形态学操作3--形态学梯度实现轮廓分析(基本梯度、内部梯度、外部梯度、方向梯度X(Y))
目录 形态学梯度概述 一.基本梯度 1.原理 2.代码 3.效果 二.内部梯度 1.原理 2.代码 3.效果 三.外部梯度 1.原理 2.代码 3.效果 四.方向梯度 1.原理 2.二值化图像(黑白) ...
- OpenCV中图像形态学操作
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:视学算法 图像形态学是图像处理的分支学科,在二值图像处理 ...
- 【youcans 的 OpenCV 例程200篇】117. 形态学操作之顶帽运算
欢迎关注 『youcans 的 OpenCV 例程 200 篇』 系列,持续更新中 欢迎关注 『youcans 的 OpenCV学习课』 系列,持续更新中 [youcans 的 OpenCV 例程 2 ...
最新文章
- Linux系统中运行.sh文件的几种方法
- SpringBoot应用之消息队列rabbitmq
- java中怎样计算个人所得税计算器,个人所得税计算器
- dart系列之:时间你慢点走,我要在dart中抓住你
- 使用Popup窗口创建无限级Web页菜单(5)
- mysql如何抛出错误信息_如何捕获并重新抛出MySQL中的所有错误
- WPF获取原始控件样式。
- 深度学习软件安装及环境配置(Win10)
- PTA 厘米换算英尺英寸
- JZOJ4809挖金矿
- 各种SCI,CCF,EI,北大核心等刊物大致含金量,用奖学金加分看出!
- 纸本书变电子书是很小的事——詹宏志谈数字出版时代
- 怎么查看CAD图纸并更改图纸背景颜色?
- android电话本导入iphone,换手机之后安卓通讯录怎么导入iphone手机
- Ubuntu下创建Android Studio启动图标
- 指定的服务器标记为删除,如何解决“指定的服务已被标记为删除”错误
- 百问网七天物联网课程课后笔记(第五天提高课)
- C++题解:[NOIP2008pj]立体图
- 复数 X 和/或 Y 参数的虚部已忽略
- 单细胞数据分析流程R包scCancer