图像处理之形态学操作汇总(opencv-python实现)

目录

形态学基础操作

灰度图像膨胀

灰度图像腐蚀

二值图像膨胀

二值图像腐蚀

膨胀腐蚀的opencv实现

膨胀腐蚀的组合

开运算

闭运算

顶帽变换

底帽变换

击中击不中

形态学梯度


形态学基础操作

一个例子可以胜过很多定义,所以我们直接上例子。

灰度图像膨胀

源图像:  209  125  191    9  168  246  158    14
  232  205  101  113   42  141  122   136
   33   37  168   98   31   36   91   200
  234  108   44  196  128   39  213   240
  162  235  181  204  246   66  150    34
   25  203    9   48   88  216  141   146
   72  246   71  126  150   66  235   121

结构元素:    1    1    1
    1    1    1
    1    1    1

膨胀结果:  232  232  205  191  246  246  246   158
  232  232  205  191  246  246  246   200
  234  234  205  196  196  213  240   240
  235  235  235  246  246  246  240   240
  235  235  235  246  246  246  240   240
  246  246  246  246  246  246  235   235
  246  246  246  150  216  235  235   235

可见,增强图像中亮的部分和细节,去掉暗淡的区域;可以扩充亮色区域,或者去掉暗点噪声;

灰度图像腐蚀

源图像:  209  125  191    9  168  246  158    14
  232  205  101  113   42  141  122   136
   33   37  168   98   31   36   91   200
  234  108   44  196  128   39  213   240
  162  235  181  204  246   66  150    34
   25  203    9   48   88  216  141   146
   72  246   71  126  150   66  235   121

结构元素:    1    1    1
    1    1    1
    1    1    1

结果图像:  125  101    9    9    9   42   14    14
   33   33    9    9    9   31   14    14
   33   33   37   31   31   31   36    91
   33   33   37   31   31   31   34    34
   25    9    9    9   39   39   34    34
   25    9    9    9   48   66   34    34
   25    9    9    9   48   66   66   121

可见,增强图像中暗的部分和细节i,去掉亮点区域;可以扩充暗色区域,或者去掉亮点噪声;

二值图像膨胀

图像处理之形态学操作汇总(opencv-python实现)_第1张图片

定义:用结构元素滤波图像,大于1的区域全部置为1;

按照结构元素也就是上图中模板的形状,对亮部区域进行扩充;

二值图像腐蚀

图像处理之形态学操作汇总(opencv-python实现)_第2张图片

定义:用结构元素滤波图像,等于模板元素和的像素置为1;

按照结构元素也就是上图中模板的形状,对亮部区域进行缩小;

膨胀腐蚀的opencv实现

import cv2 as cv
import numpy as np
 
img = cv.imread('j.png',0)
kernel = np.ones((5,5),np.uint8)
erosion = cv.erode(img,kernel,iterations = 1) #腐蚀
dilation = cv.dilate(img,kernel,iterations = 1)#膨胀
#iteration 表示这样的操作进行几次

膨胀腐蚀的组合

无论在二值图像还是灰度图像中,都如下定义操作就可以得到相应操作,但是一般是在二值图像中操作:对于一些操作opencv给出了直接实现,有的需要自己对膨胀腐蚀操作进行组合再进行实现;

开运算

先腐蚀再膨胀;灰度图像去掉比接够元素更小的明亮细节;

opening = cv.morphologyEx(img, cv.MORPH_OPEN, kernel)

闭运算

先膨胀再腐蚀;绘图图像去除比结构元素更小的暗色细节;

closing = cv.morphologyEx(img, cv.MORPH_CLOSE, kernel)

顶帽变换

从源图像中减去图像开运算之后的图像称为顶帽变换(one-hat)

tophat = cv.morphologyEx(img, cv.MORPH_TOPHAT, kernel)

底帽变换

从源图像中减去图像闭运算之后的图像称为底帽变换;

blackhat = cv.morphologyEx(img, cv.MORPH_BLACKHAT, kernel)

击中击不中

一幅图像两种结构元素腐蚀操作之后的图像的交集,用来提取指定形状;

按照定义实现即可;

形态学梯度

膨胀的结果减去腐蚀的结果;

gradient = cv.morphologyEx(img, cv.MORPH_GRADIENT, kernel)

参考:

1、https://blog.csdn.net/a8039974/article/details/78068743

2、https://www.cnblogs.com/angle6-liu/p/10704970.html

3、《数字图像处理第二版》冈萨雷斯

你可能感兴趣的:(图像处理,opencv,计算机视觉,图像处理,opencv,python)