opencv学习笔记第五章 使用形态学滤波对图像进行开闭运算
来源:互联网 发布:ewsa软件字典手机号码 编辑:程序博客网 时间:2024/05/21 06:36
开运算:先腐蚀再膨胀,去掉小白点
闭运算:先膨胀再腐蚀,去掉小黑点
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() );
第一个参数,InputArray类型的src,输入图像,即源图像,填Mat类的对象即可。图像位深应该为以下五种之一:CV_8U, CV_16U, CV_16S, CV_32F 或CV_64F。
第二个参数,OutputArray类型的dst,即目标图像,函数的输出参数,需要和源图片有一样的尺寸和类型。
第三个参数,int类型的op,表示形态学运算的类型,可以是如下之一的标识符:
MORPH_OPEN – 开运算(Opening operation)
MORPH_CLOSE – 闭运算(Closing operation)
MORPH_GRADIENT - 形态学梯度(Morphological gradient)
MORPH_TOPHAT - “顶帽”(“Top hat”)
MORPH_BLACKHAT - “黑帽”(“Black hat“)
第四个参数,InputArray类型的kernel,形态学运算的内核。若为NULL时,表示的是使用参考点位于中心3x3的核。我们一般使用函数 getStructuringElement配合这个参数的使用。getStructuringElement函数会返回指定形状和尺寸的结构元素(内核矩阵)。关于getStructuringElement我们上篇文章中讲过了,这里为了大家参阅方便,再写一遍:
其中,getStructuringElement函数的第一个参数表示内核的形状,我们可以选择如下三种形状之一 :
矩形: MORPH_RECT
交叉形 : MORPH_CROSS
椭圆形 : MORPH_ELLIPSE
而getStructuringElement函数的第二和第三个参数分别是内核的尺寸以及锚点的位置。
我们一般在调用erode以及dilate函数之前,先定义一个Mat类型的变量来获得getStructuringElement函数的返回值。对于锚点的位置,有默认值Point(-1, -1),表示锚点位于中心。且需要注意,十字形的element形状唯一依赖于锚点的位置。而在其他情况下,锚点只是影响了形态学运算结果的偏移。
第五个参数,Point类型的anchor,锚的位置,其有默认值( - 1, - 1),表示锚位于中心。
第六个参数,int类型的iterations,迭代使用函数的次数,默认值为1。
第七个参数,int类型的borderType,用于推断图像外部像素的某种边界模式。注意它有默认值BORDER_ CONSTANT。
第八个参数,const Scalar&类型的borderValue,当边界为常数时的边界值,有默认值morphologyDefaultBorderValue(),一般我们不用去管他。需要用到它时,可以看官方文档中的createMorphologyFilter()函数得到更详细的解释
#include <iostream>#include "opencv2/opencv.hpp"using namespace std;using namespace cv;int main(){ Mat image, image2, eroded, dilated, close,open; image = imread("D:/1.jpg", 0); threshold(image, image2, 60, 255, THRESH_BINARY); Mat element(5, 5, CV_8U, Scalar(1)); erode(image2, eroded, Mat()); dilate(image2, dilated, element); //dilate(image, dilated, Mat(), Point(-1,-1), 2); //二者等价 namedWindow("image"); imshow("image", image2); //namedWindow("eroded"); //imshow("eroded", eroded); //namedWindow("dilated"); //imshow("dilated", dilated); morphologyEx(image2, close, MORPH_CLOSE, element); namedWindow("closed"); imshow("closed", close); morphologyEx(image2, open, MORPH_OPEN, element); namedWindow("open"); imshow("open", close); waitKey(0);}
- opencv学习笔记第五章 使用形态学滤波对图像进行开闭运算
- 第五章 使用形态学滤波对图像进行开闭运算
- OpenCV2编程手册笔记之 5.3形态学滤波对图像进行开闭运算
- opencv学习笔记第五章:基于形态学运算的图像变换(1)形态学运算进行腐蚀和膨胀
- 数学形态学图像处理——图像腐蚀,膨胀,开闭运算(《学习OpenCV》练习题第五章第四题)
- 使用形态学滤波对图像进行腐蚀、膨胀运算
- 使用形态学滤波对图像进行腐蚀、膨胀运算
- OpenCV学习笔记(14):形态学滤波对图像进行边缘及角点检测
- 第五章 使用形态学滤波对图像进行边缘及角点检测
- OpenCV学习笔记-形态学操作-腐蚀膨胀-开闭运算
- OpenCV2编程手册笔记之 5.2形态学滤波对图像进行腐蚀、膨胀运算
- opencv学习笔记之5.4使用形态学滤波进行边缘和角点检测
- 【OpenCV学习笔记 008】基于形态学运算的图像变换
- Opencv形态学滤波-闭运算
- 【数字图像处理学习笔记之五】形态学开闭运算
- opencv2使用形态学滤波对图像进行边缘及角点检测
- 形态学滤波对图像进行边缘及角点检测
- 安装问题+读取图像、放缩、形态学开闭运算、显示图像的opencv程序代码
- 关于matlab中求定积分int和quad命令的使用
- 上传和引用以编译的module
- 国庆做题报告(一)
- OGG-01756 创建抽取进程有警告 文档 ID 1330577.1
- 职业规划
- opencv学习笔记第五章 使用形态学滤波对图像进行开闭运算
- [BZOJ3930][CQOI2015]选数(数论+容斥)
- linux下的find文件查找命令与grep文件内容查找命令
- IDEA 重复代码快速重构
- EventBus总结
- Java 并发编程 之 volatile(三)
- 01背包记录路径)
- 宽度已知,实现三栏布局的方案(5种layout方案)
- Linux服务器Zookeeper+Dubbo环境搭建