C++ opencv图像处理实现图像腐蚀和膨胀示例

目录
  • 1 概念
  • 2 膨胀
  • 3 腐蚀

1 概念

1.1 腐蚀跟膨胀是最基本的形态学运算

1.2 腐蚀跟膨胀是对图像的白色的部分(亮光部分)进行操作

1.3 腐蚀是对亮光部分进行腐蚀 拥有比原图更小的亮光部分

1.4 膨胀是对亮光部分进行膨胀 拥有比原图更大的亮光部分

这里有一个误区

假如说在图片上的一个字,很多人都会认为膨胀是将图片上的字进行膨胀放大实则不然

可以看到膨胀是将图片上的亮色区域进行放大,字就会变得更小,结构体够大的情况下,字就会看不见了**

可以看到腐蚀是将图片上的亮色区域进行放小,字就会变得更大。

2 膨胀

1.先看膨胀函数的原码,可以到opencv官网进行查看

附链接:https://docs.opencv.org/4.5.5/

这里选择是4.5.5 版本

  • src 输入图像
  • dst 输出与src相同大小和类型的图像。
  • kernle 用于膨胀的核结构元素 内核可以使用getStructuringElement创建
  • getStructuringElement函数下面会说到
  • anchor 元素中锚的锚定位置; 默认值(-1,-1)表示锚位于元素中心。
  • iterations 迭代次数
  • borderType 像素外推方法
  • borderValue 当边界为常数时的边界值

当我们用dilate 函数时一般情况下使用前三个参数就可以了,后面参数都有其默认值,可以视情况改变

2 接下来了解getStructuringElement函数

  • shape 形状
  • MORPH_RECT 矩形
  • MORPH_CROSS 交叉形
  • MORPH_ELLIPSE 椭圆形
  • Szie 构造元素的大小(内核尺寸)
  • anchor 锚定位置,默认(-1,1)表示锚位于中心

3 代码

int main()
{
	Mat img1, img2;
	img1 = imread("猫.png");
	imshow("原图", img1);
	Mat element = getStructuringElement(MORPH_RECT, Size(7, 7));
	dilate(img1, img2, element);
	imshow("效果图", img2);
	waitKey(0);
}

效果图 :

3 腐蚀

1.先看腐蚀函数的原码

  • src 输入图像
  • dst 输出与src相同大小和类型的图像。
  • kernle 用于腐蚀的核结构元素 内核可以使用getStructuringElement创建
  • anchor 元素中锚的锚定位置; 默认值(-1,-1)表示锚位于元素中心。
  • iterations 迭代次数
  • borderType 像素外推方法
  • borderValue 当边界为常数时的边界值

2 代码

int main()
{
	Mat img1, img2;
	img1 = imread("猫1.jpg");
	imshow("原图", img1);
	Mat element = getStructuringElement(MORPH_RECT, Size(7, 7));
	erode(img1, img2, element);
	imshow("效果图", img2);
	waitKey(0);
}

3 效果图

4 调整数值的轨迹条

1.先看函数原码

  • trackbarname 创建的轨迹条名称。
  • winname 窗口的名称,可以附加在指定的窗口上
  • value 一个指向整形变量的指针,其值反映滑块的位置。 在创建时,滑块的位置由这个变量定义。
  • count滑块的最大位置。 最小的位置总是0。
  • onChange 指针指向每次滑块改变位置时调用的函数。 这个函数的原型应该是void Foo(int,void*); 其中第一个参数是轨迹条位置,第二个参数是用户数据(见下一个参数)。 如果回调函数是NULL指针,则不调用回调函数,只更新值。
  • userdata 作为回调函数传递的用户数据

2 代码

Mat img1, img2;
int chu = 3;
int da = 21;
void hui(int, void*);
int main()
{
	img1 = imread("猫1.jpg");
	namedWindow("原图");
	imshow("原图", img1);
	namedWindow("膨胀");
	createTrackbar("结构元尺寸", "膨胀", &chu, da,hui);
	hui(chu, 0);
	waitKey(0);
}
void hui(int, void*)
{
	int s = chu ;
	Mat elent = getStructuringElement(MORPH_RECT, Size(s, s));
	dilate(img1, img2, elent);
	imshow("膨胀", img2);
}

3 效果图

以上就是C++ opencv图像处理实现腐蚀和膨胀示例的详细内容,更多关于C++ opencv图像腐蚀膨胀的资料请关注我们其它相关文章!

(0)

相关推荐

  • C++ opencv图像平滑滤波器使用示例

    目录 前言 一.均值滤波 1.均值滤波函数 2.均值滤波代码 二.高斯滤波 1.高斯滤波函数 2.高斯滤波代码 三.中值滤波 1.中值滤波函数 2.中值滤波代码 四.双边滤波 1.双边滤波函数 2.双边滤波代码 总结 前言 图像平滑是一种实用的数字图像处理技术,一个较好的平滑处理方法既能消除图像噪声,又不使图像边缘轮廓和线条变模糊. 一.均值滤波 归一化方框滤波器是很简单的滤波器,输出像素值是核窗口内像素值的均值,如果使用归一化处理,方框滤波就是均值滤波,实际上均值滤波是方框滤波归一化后的特殊情

  • C++ opencv图像处理使用cvtColor实现颜色转换

    目录 前言 源码 效果图 代码颜色空间转换代码 前言 在我们读取图像时通常会用到imread()函数,里面flags可以决定通道数,来得到我们想要的图像,比如: -1 按解码得到的方式读入图像: 0 单通道 灰度图: 1 三通道 彩色: 当我们想要其他类型的图像时,这种方法就有一些局限性了,所以我们有必要了解cvtColor 这是一种颜色空间转换函数. 源码 void cvtColor(InputArray src, OutputArray dst, int code, int dstCn =

  • C++ opencv图像处理实现图片边缘检测示例

    目录 边缘检测简介 一.边缘检测步骤 二.Canny 1.函数 2.代码 二.Sobel 1.函数 2.代码 三.Scharr 1.函数 2.代码 四.Laplacian 1.函数 2.代码 总结 边缘检测简介 边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点. 图像边缘检测大幅度地减少了数据量,并且剔除量不相关的信息,保留了图像重要的结构属性. 一.边缘检测步骤 1.图像获取 2.图像滤波 3.图像增强 4.图像检测 5.图像定位 二.Canny 1.

  • C++ Opencv自写函数实现膨胀腐蚀处理技巧

    目录 一.膨胀腐蚀学习笔记 二.代码及结果分享 三.注意事项 3.1A.dot(B) 3.2A.mul(B) 一.膨胀腐蚀学习笔记 二.代码及结果分享 #include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; //定义腐蚀函数 void myErode(Mat Src, Mat Tem, Mat Dst) { int m = (Tem.rows - 1) /

  • C++ opencv图像处理实现图片几何变换示例

    目录 简介 一.图像平移 1.图像平移代码 (不改变图像大小) 2.图像平移代码 (改变图像大小) 二.图像旋转 1.图像旋转函数 2.仿射变换函数 3.代码 三.图像缩放 1.图像缩放函数 2.图像缩小代码 3.图像放大代码 总结 简介 图像的几何变换不改变图像的像素值,而是改变像素所在的几何位置,从变换的性质来分,图像的几何变换有图像的位置变换(平移,镜像,旋转).图像的形状变换(放大,缩小,错切)等基本变换,以及图像的复合变换等, 一.图像平移 图像平移是将一幅图像中所有的点都按照指定的平

  • C++ opencv图像处理实现图像腐蚀和膨胀示例

    目录 1 概念 2 膨胀 3 腐蚀 1 概念 1.1 腐蚀跟膨胀是最基本的形态学运算 1.2 腐蚀跟膨胀是对图像的白色的部分(亮光部分)进行操作 1.3 腐蚀是对亮光部分进行腐蚀 拥有比原图更小的亮光部分 1.4 膨胀是对亮光部分进行膨胀 拥有比原图更大的亮光部分 这里有一个误区 假如说在图片上的一个字,很多人都会认为膨胀是将图片上的字进行膨胀放大实则不然 可以看到膨胀是将图片上的亮色区域进行放大,字就会变得更小,结构体够大的情况下,字就会看不见了** 可以看到腐蚀是将图片上的亮色区域进行放小,

  • Python OpenCV图像处理之图像滤波特效详解

    目录 1分类 2邻域滤波 2.1线性滤波 2.2非线性滤波 3频域滤波 3.1低通滤波 3.2高通滤波 1 分类 图像滤波按图像域可分为两种类型: 邻域滤波(Spatial Domain Filter),其本质是数字窗口上的数学运算.一般用于图像平滑.图像锐化.特征提取(如纹理测量.边缘检测)等,邻域滤波使用邻域算子——利用给定像素周围像素值以决定此像素最终输出的一种算子 频域滤波(Frequency Domain Filter),其本质是对像素频率的修改.一般用于降噪.重采样.图像压缩等. 按

  • python opencv 图像处理之图像算数运算及修改颜色空间

    目录 1.图像加法 1.1Numpy加法 1.2OpenCV加法 2.图像融合 3.改变颜色空间 1.图像加法 图像加法有两种方式,一种是通过 Numpy 直接对两个图像进行相加,另一种是通过 OpenCV 的 add() 函数进行相加. 不管使用哪种方法,相加的两个图像必须具有相同的深度和类型,简单理解就是图像的大小和类型必须一致. 1.1Numpy加法 Numpy 的运算方法是: img = img1 + img2 ,然后再对最终的运算结果取模. 当最终的像素值 <= 255 时,则运算结果

  • 基于python的opencv图像处理实现对斑马线的检测示例

    基本思路 斑马线检测通过opencv图像处理来进行灰度值转换.高斯滤波去噪.阈值处理.腐蚀和膨胀后对图像进行轮廓检测,通过判断车辆和行人的位置,以及他们之间的距离信息,当车速到超过一定阈值时并且与行人距离较近时,则会被判定车辆为未礼让行人. 结果示例 实验流程 先通过视频截取一张图片来进行测试,如果结果满意之后再嵌套到视频中,从而达到想要的效果. 1.预处理(灰度值转换.高斯滤波去噪.阈值处理.腐蚀和膨胀)> 根据自己的需求来修改一些值 #灰度值转换 imgGray = cv2.cvtColor

  • 使用OpenCV实现人脸图像卡通化的示例代码

    引言 通过前面的文章我们已经了解到OpenCV 是一个用于计算机视觉和机器学习的开源 python 库.它主要针对实时计算机视觉和图像处理.它用于对图像执行不同的操作,这些操作使用不同的技术对图像进行转换.在本文中,我们将实现使用OpenCV将人脸图像卡通化. 让我们从导入必需的库开始! import cv2 import numpy as np 第一次变换(卡通化) 在这个转换中,我们将找到图像的边缘,并使用双边滤波器和位操作符制作一个卡通化的图像. # Reading the Image i

  • python数字图像处理之图像自动阈值分割示例

    目录 引言 1.threshold_otsu 2.threshold_yen 3.threshold_li 4.threshold_isodata 5.threshold_adaptive 引言 图像阈值分割是一种广泛应用的分割技术,利用图像中要提取的目标区域与其背景在灰度特性上的差异,把图像看作具有不同灰度级的两类区域(目标区域和背景区域)的组合,选取一个比较合理的阈值,以确定图像中每个像素点应该属于目标区域还是背景区域,从而产生相应的二值图像. 在skimage库中,阈值分割的功能是放在fi

  • Opencv图像处理之图像增加边框

    理论 在本教程中,我们将简要介绍两种为图像定义额外填充(边框)的方法: BORDER_CONSTANT:用恒定值(即黑色或0)填充图像 BORDER_REPLICATE:原始边缘的行或列复制到额外边框. 代码 程序的运行流程 加载一张图片 让用户选择输入图像中使用哪种填充. 有两种选择: 1.常量值边框:为整个边框应用常量值的填充. 该值将每0.5秒随机更新一次. 2.复制边框:将从原始图像边缘的像素值复制边框. 当用户按下'ESC'时程序结束 原始代码 #include "opencv2/im

  • opencv 图像腐蚀和图像膨胀的实现

    语言:python+opencv 为什么使用图像腐蚀和图像膨胀 如图,使用图像腐蚀进行去噪,但是为压缩噪声. 对腐蚀过的图像,进行膨胀处理,可以去除噪声,并保持原样形状. 图像腐蚀 腐蚀主要针对的是二值图像,如只有0和1两个值, 两个输入对象:1原始二值图像,2卷积核 使用卷积核遍历原始二值图像,如果卷积核对应的元素值均为1,其值才为1,否则为0.如图,红色为卷积核. 腐蚀后的结果示意图见下面,效果是将边缘抹掉一部分. 使用方法:erode 中文翻译:侵蚀 处理结果=cv2.erode(原始图像

  • Python图像运算之腐蚀与膨胀详解

    目录 前言 一.形态学理论知识 二.图像腐蚀 三.图像膨胀 四.总结 前言 这篇文章将详细讲解开始图像形态学知识,主要介绍图像腐蚀处理和膨胀处理.数学形态学(Mathematical Morphology)是一种应用于图像处理和模式识别领域的新方法.数学形态学(也称图像代数)表示以形态为基础对图像进行分析的数学工具,其基本思想是用具有一定形态的结构元素去量度和提取图像中对应形状以达到对图像分析和识别的目的. 一.形态学理论知识 数学形态学的应用可以简化图像数据,保持它们基本的形状特征,并出去不相

  • OpenCV实现图像腐蚀

    图像的腐蚀过程与图像的卷积操作类似,都需要模板矩阵来控制运算的结果,在图像的腐蚀和膨胀中这个模板矩阵被称为结构元素.与图像卷积相同,结构元素可以任意指定图像的中心点,并且结构元素的尺寸和具体内容都可以根据需求自己定义.定义结构元素之后,将结构元素的中心点依次放到图像中每一个非0元素处,如果此时结构元素内所有的元素所覆盖的图像像素值均不为0,则保留结构元素中心点对应的图像像素,否则将删除结构元素中心点对应的像素.图像的腐蚀过程示意图如图6-12所示,图6-12中左侧为待腐蚀的原图像,中间为结构元素

随机推荐