opencv学习笔记(二) 图像腐蚀和膨胀

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 效果图

在这里插入图片描述

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要使用 OpenCV 在 Visual Studio 中实现图像膨胀腐蚀处理,需要按照以下步骤进行操作: 1. 下载和安装 OpenCV 库:您可以从官方网站下载 OpenCV 库并按照官方文档中的说明进行安装。 2. 创建一个新的 Visual Studio 项目并将其配置为使用 OpenCV 库:您需要在项目属性中添加包含和库目录,并在链接器中添加所需的库文件。 3. 在代码中包含 OpenCV 库文件:您需要在代码中添加包含 OpenCV 库文件的头文件。 4. 加载图像并创建一个核:您需要使用 OpenCV 中的“imread”函数加载图像,并创建一个核来进行膨胀腐蚀处理。 5. 膨胀腐蚀处理:您需要使用 OpenCV 中的“dilate”和“erode”函数来进行膨胀腐蚀处理。这些函数需要传递图像和核作为参数,以及一些其他的可选参数,例如膨胀腐蚀的次数。 以下是一个使用 OpenCV 在 Visual Studio 中进行图像膨胀腐蚀处理的示例代码: ```c++ #include <opencv2/opencv.hpp> using namespace cv; int main() { // 加载图像 Mat image = imread("image.jpg", IMREAD_GRAYSCALE); // 创建一个核 Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5)); // 膨胀处理 Mat dilated_image; dilate(image, dilated_image, kernel, Point(-1, -1), 1); // 腐蚀处理 Mat eroded_image; erode(image, eroded_image, kernel, Point(-1, -1), 1); // 显示原图和处理后的图像 imshow("Original Image", image); imshow("Dilated Image", dilated_image); imshow("Eroded Image", eroded_image); waitKey(0); return 0; } ``` 注意,此示例代码假定您已将 OpenCV 库正确地配置为 Visual Studio 项目,并且已将“image.jpg”文件放置在可执行文件所在的目录中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

浅念念52

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

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

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

打赏作者

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

抵扣说明:

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

余额充值