形态学腐蚀膨胀操作

1.腐蚀操作

增强图像的暗部(图像矩阵中数值更小的部分),滤波得到的新像素点为滤波器内最小的值,也就是用最暗的点代替滤波器内的锚点

erode(src,dst,kernel,Point,epoch_num)

参数分别为:输入图像,输出图像,滤波器,锚点(一般为Point(-1,-1)),迭代次数(默认为一次)

2.膨胀操作

增强图像的亮部(图像矩阵中数值更大的部分),滤波得到的心像素点为滤波器内的最大值,也就是用最亮的点代替滤波器内的锚点

dilate(src,dst,kernel,Point,epoch_num)

参数同腐蚀

以上两个解释是我认为最好懂的定义

按照数字图像处理教材中的说法

二值图像的腐蚀是使用滤波器对图形进行滤波,滤波器的边界不超过图形边界,那么滤波后图形的新边界就是由锚点所画的边界,像队员图形会有所缩小所以叫腐蚀

膨胀是锚点不超过图性的边界,那么滤波器边界画出的新边界就是新的图形边界,相比原图行会有所扩大,所以是膨胀。

这种说法不是非常准确,我觉得按照像素点的数值来描述更准确一些。

获取滤波器

Mat kernel=getstructuringElement(int shape,Size kernel,Point)

shape为滤波器形状,常为:MORPH_RECT矩形,MORPH_CROSS十字,MORPH_ELLIPSE圆弧

代码

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

using namespace std;
using namespace cv;

Mat src, dst;
int elem_size = 3;
int max_size = 21;
char output_win[] = "output image";
void callback_demo(int, void*);

int main(int argc, char **argv)
{
    src = imread("b.jpg");
    if (src.empty())
    {
        cout << "load img failed" << endl;
        return -1;
    }
    imshow("input img", src);
    namedWindow(output_win, CV_WINDOW_AUTOSIZE);
    createTrackbar("Element size :", output_win, &elem_size, max_size, callback_demo);
    callback_demo(0, 0);
    waitKey(0);
    return 0;
}

void callback_demo(int, void*)
{
    int s = elem_size * 2 + 1;
    Mat structureElement = getStructuringElement(MORPH_RECT, Size(s, s), Point(-1, -1));
    //dilate(src, dst, structureElement, Point(-1, -1),1);
    erode(src, dst, structureElement, Point(-1, -1), 1);
    imshow(output_win, dst);
    return;
}

增加了滚动条可以调节腐蚀膨胀的滤波器大小,随着滤波器变大可以清楚看到图片的亮度按照滤波器的形状逐层叠加。

暗部增强的腐蚀

亮部增强的膨胀

不同形状

原文地址:https://www.cnblogs.com/wangtianning1223/p/12059583.html

时间: 2024-10-18 03:34:20

形态学腐蚀膨胀操作的相关文章

图像形态学操作—腐蚀膨胀深入

这里我们主要想讲解冈萨雷斯的数字图像处理这本书上膨胀腐蚀的定义及用opencv实现的结果,然后对比它们之间的差异. 一:opencv实现 在这之前可以看我的另外一篇blog:http://blog.csdn.net/lu597203933/article/details/17184439 膨胀: 案例代码: int main() { int a[8][8] = { {0,0,0,0,0,0,0,0}, {0,0,5,1,0,0,1,1}, {0,1,0,1,0,1,0,0}, {0,1,1,2,

OpenCV2:大学篇 形态学技术-腐蚀与膨胀操作

一.简介 图像处理中的形态学操作用于图像预处理操作(去噪 形状简化) 图像增强(骨架提取 细化  凸包  物体标记)  物体背景分割及物体形态量化等场景 二.腐蚀与膨胀操作 OpenCV 提供了 erode() 进行腐蚀操作 提供了 dilate() 进行膨胀操作 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.h

opencv-图像形态学之膨胀腐蚀

转自:https://blog.csdn.net/poem_qianmo/article/details/23710721 一.原理 1.1 形态学概述 形态学(morphology)一词通常表示生物学的一个分支,该分支主要研究动植物的形态和结构.而我们图像处理中指的形态学,往往表示的是数学形态学.下面一起来了解数学形态学的概念. 数学形态学(Mathematical morphology) 是一门建立在格论和拓扑学基础之上的图像分析学科,是数学形态学图像处理的基本理论.其基本的运算包括:二值腐

机器学习进阶-图像形态学操作-膨胀操作 1.cv2.dilate(进行膨胀操作)

1.cv2.dilate(src, kernel, iteration) 参数说明: src表示输入的图片, kernel表示方框的大小, iteration表示迭代的次数 膨胀操作原理:存在一个kernel,在图像上进行从左到右,从上到下的平移,如果方框中存在白色,那么这个方框内所有的颜色都是白色 代码: 1.读取带有毛躁的图片 2.使用cv2.erode进行腐蚀操作 3.使用cv2.dilate进行膨胀操作 import cv2 import numpy as np # 1.读入图片 img

基于FPGA的腐蚀膨胀算法实现

本篇文章我要写的是基于的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,,腐蚀在二值图像的基础上做"收缩"或"细化"操作,膨胀在二值图像的基础上做"加长"或"变粗"的操作.那么什么是二值图像呢?把一幅图片看做成一个二维的数组,那么二值图像是一个只有0和1的逻辑数组,我们前面Sobel边缘检测后的图像输出边缘效果,设置个阈值,大于阈值输出为1,小于阈值输出为0,最后输出就是一幅二维图像了. 上一篇我是直接用MATLAB处理后的

基于MATLAB的腐蚀膨胀算法实现

本篇文章要分享的是基于MATLAB的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,腐蚀在二值图像的基础上做“收缩”或“细化”操作,膨胀在二值图像的基础上做“加长”或“变粗”的操作. 什么是二值图像呢?把一幅图片看做成一个二维的数组,那么二值图像是一个只有0和1的逻辑数组,我们前面Sobel边缘检测后的图像输出边缘效果,设置个阈值,大于阈值输出为1,小于阈值输出为0,最后输出就是一幅二维图像了. 腐蚀 腐蚀是一种消除边界点,使边界向内部收缩的过程.可以用来消除小且无意义的物体.用3X3的结构元

滤波、形态学腐蚀与卷积(合集)

https://blog.csdn.net/qq_36285879/article/details/82810705 S1.1 滤波.形态学腐蚀与卷积(合集) 参考:<学习OpenCV3>.<数字图像处理编程入门>文章目录 S1.1 滤波.形态学腐蚀与卷积(合集)滤波器简单模糊与方形滤波中值滤波高斯滤波双边滤波导数和梯度Sobel算子Scharr滤波器拉普拉斯变换图像形态学膨胀&腐蚀通用形态学函数开操作与闭操作形态学梯度顶帽和黑帽滤波器 毛星云那本有滤波器源码解析. 简单模

膨胀操作.m

%膨胀操作 clc;clear;close; I=imread('e:\role0\003i.bmp'); %载入图像 I1=rgb2gray(I); subplot(1,2,1); imshow(I1); title('灰度图像') grid on; %显示网格线 axis on; %显示坐标系 se=strel('disk',1); %生成圆形结构元素 I2=imdilate(I1,se); %用生成的结构元素对图像进行膨胀 subplot(1,2,2); imshow(I2); title

day 10 形态学处理 膨胀

#-*- coding:utf-8 -*- #1.导入包 import cv2 import numpy as np #2.导入图片 img = cv2.imread('home.jpg',0) #3.设置卷积核 5x5矩形卷积核 kernel = np.ones((5,5),np.uint8) print(kernel) kernel2 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5)) print(kernel2) #4.膨胀操作 dil