opencv学习笔记10(形态学操作)

形态学操作

开操作- open

  • 先腐蚀后膨胀
    在这里插入图片描述
  • 可以去掉小的对象(亮的),假设对象是前景色,背景是黑色
    在这里插入图片描述

闭操作- close

  • 先膨胀后腐蚀(bin2)
    在这里插入图片描述
  • 可以填充小的黑洞(fill hole),假设对象是前景色,背景是黑色
    在这里插入图片描述

形态学梯度- Morphological Gradient

  • 膨胀减去腐蚀(提取物体边缘)
    在这里插入图片描述
  • 又称为基本梯度(其它还包括-内部梯度、方向梯度)
    在这里插入图片描述

顶帽 – top hat

  • 顶帽 是原图像与开操作之间的差值图像(突出原图像中比周围亮的区域)
  • 左侧为原图像,右侧为顶帽
    在这里插入图片描述
  • 原图像 - 开操作后图像 = 顶帽
    在这里插入图片描述

黑帽 – black hat

  • 黑帽是闭操作图像与源图像的差值图像(突出原图像中比周围暗的区域)
  • 左侧为原图像,右侧为黑帽
    在这里插入图片描述
  • 闭操作后图像 - 原图像 = 黑帽
    在这里插入图片描述

相关API

参考链接:https://www.jianshu.com/p/ee72f5215e07
●函数原型

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() )

●参数解释
○src:源图像Mat对象
○dst:目标图像Mat对象
○op:操作的类型,通过源码我们得知总共有以下几种类型:

enum MorphTypes{
    MORPH_ERODE    = 0, //腐蚀
    MORPH_DILATE   = 1, //膨胀
    MORPH_OPEN     = 2, //开操作
    MORPH_CLOSE    = 3, //闭操作
    MORPH_GRADIENT = 4, //梯度操作
    MORPH_TOPHAT   = 5, //顶帽操作
    MORPH_BLACKHAT = 6, //黑帽操作
    MORPH_HITMISS  = 7  
};

○kernel:用于膨胀操作的结构元素,如果取值为Mat(),那么默认使用一个3 x 3 的方形结构元素,可以使用getStructuringElement()来创建结构元素
○anchor:参考点,其默认值为(-1,-1)说明位于kernel的中心位置。
○borderType :边缘类型,默认为BORDER_CONSTANT。
○borderValue :边缘值,用它的默认值即可。

参数3的类型:
●MORPH_ERODE(腐蚀)
跟erode(腐蚀)函数效果一样
●MORPH_DILATE(膨胀)
跟dilate(膨胀)函数效果一样
●MORPH_OPEN(开)
其实内部就是进行了先腐蚀后膨胀的操作。
●MORPH_CLOSE(闭)
其实内部就是进行了先膨胀后腐蚀的操作。
●MORPH_GRADIENT(梯度)
内部是膨胀减去腐蚀
●MORPH_TOPHAT(顶帽)
原图像-开运算图,突出原图像中比周围亮的区域
●MORPH_BLACKHAT(黑帽)
闭运算图-原图像,突出原图像中比周围暗的区域

代码实现

#include <opencv2/opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;


int main(){
	Mat src;
	src = imread("G:/OpenCV/opencv笔记所用图片/X2.png");
	if (src.empty())
	{
		cout << "could not load image..." << endl;
		getchar();
		return -1;
	}

	imshow("input image",src);

	Mat dst;
	Mat kernel = getStructuringElement(MORPH_RECT, Size(17, 17), Point(-1, -1));
	morphologyEx(src, dst, CV_MOP_OPEN, kernel);
	imshow("open image", dst);
	morphologyEx(src, dst, CV_MOP_CLOSE, kernel);
	imshow("close image", dst);
	morphologyEx(src, dst, CV_MOP_TOPHAT, kernel);
	imshow("tophat image", dst);
	morphologyEx(src, dst, CV_MOP_BLACKHAT, kernel);
	imshow("blackhat image", dst);

	waitKey(0);
	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾名招财

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值