opencv学习-膨胀与腐蚀
Posted 殇堼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了opencv学习-膨胀与腐蚀相关的知识,希望对你有一定的参考价值。
膨胀与腐蚀是图像处理中最常用的形态学操作手段,其中要涉及到一个主要的API,即生成卷积核的API。
1.核生成的API
getStructuringElement(int shape, Size ksize, Point anchor)
int shape - 形状 (MORPH_RECT \\MORPH_CROSS \\MORPH_ELLIPSE)
第一个参数主要有如下几种选择:
(1)MORPH_RECT:矩形结构区域。
(2)MORPH_CROSS,十字形结构区域。
(3)MORPH_ELLIPSE,椭圆结构区域,内接于矩形Rect(0,0,esize.width,0.esize.height)的填充椭圆。
Size ksize- 卷积核的大小
Point anchor - 锚点 默认是Point(-1, -1)意思就是中心像素
例如:
getStructuringElement(MORPH_RECT, Size(3, 3), Point(-1, -1));
2.膨胀
原理:将卷积核内的像素最大值代替区域内锚点的值,所谓锚点,就是区域的中心点。
锚点 默认是Point(-1, -1)意思就是中心像素
2.1膨胀API
dilate(src, dst, kernel);
2.2代码展示
#include<opencv2\\opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
Mat src, dst;
src = imread("D:/images/box1.png");
if (src.empty())
{
cout << "could not load image !";
return -1;
}
imshow("原图", src);
Mat kernel;
kernel = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));//设计一个卷积核
dilate(src, dst, kernel);//膨胀API
imshow("膨胀后", dst);
waitKey(0);
return 0;
}
膨胀后,由于像素值变大后导致白斑区域扩大
3.腐蚀
原理:将卷积核内的像素最小值代替区域内锚点的值,因此腐蚀跟膨胀刚好效果是相反的。
通过腐蚀,图像黑色的区域变胖了。
3.1腐蚀API
erode(src, dst, kernel);
3.2代码展示
#include<opencv2\\opencv.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
Mat src, dst;
src = imread("D:/images/box1.png");
if (src.empty())
{
cout << "could not load image !";
return -1;
}
imshow("原图", src);
Mat kernel;
kernel = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));//设计一个卷积核
erode(src, dst, kernel);//腐蚀API
imshow("膨胀后", dst);
waitKey(0);
return 0;
}
膨胀后,由于像素值变小后导致白斑区域缩小。
以上是关于opencv学习-膨胀与腐蚀的主要内容,如果未能解决你的问题,请参考以下文章