OpenCV图像处理技术(Python)——形态学操作

© Fu Xianjun. All Rights Reserved.

一、形态学定义

形态学,即数学形态学,是图像处理过程中一个非常重要的研究方向。形态学主要从图像内提取分量信息,该分量信息通常对于表达和描绘图像的形状具有重要意义,通常是图像理解时所使用的最本质的形状特征。

二、形态学操作

1.腐蚀

作用: 腐蚀是最基本的形态学操作之一,它能够将图像的边界点消除,使图像沿着边界向内收缩,也可以将小于指定结构体元素的部分去除。

语法格式:
dst=cv2.erode(scr,kernel[,anchor[,iterations[,borerType[,borderValue]]]])

· kernel代表腐蚀操作时所采用的结构类型,它可以自定义生成,也可以通过函数cv2.getStructuringElement()生成。
· anchor代表element结构中锚点的位置。该值默认为(-1,-1),在核的中心位置。
· iteration是是腐蚀操作迭代的次数,该值默认为1,即进行一次腐蚀操作。
· borderType代表边界样式,一般采用其默认BORDER_CONSTANT。

代码如下:

import cv2
import numpy as np
img=cv2.imread('j.bmp')
kernel = np.ones((3,3),np.uint8) 
erosion = cv2.erode(img,kernel,iterations = 1)
cv2.imshow('img', img)
cv2.imshow('erosion', erosion)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:
OpenCV图像处理技术(Python)——形态学操作_第1张图片

2.膨胀

作用: 膨胀操作与腐蚀操作的作用是相反的,膨胀操作能对图像的边界进行扩张。

语法格式:

dst = cv2.dilate(scr,kernel[,iterations[,borderType[,borderValue]]])

代码如下:

import cv2
import numpy as np
img = cv2.imread('j.bmp')
kernel = np.ones((5,5),np.uint8) 
dige_dilate = cv2.dilate(dige_erosion,kernel,iterations = 1)
cv2.imshow('img', img)
cv2.imshow('dilate', dige_dilate)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:
OpenCV图像处理技术(Python)——形态学操作_第2张图片

3.通用形态学函数

dst=cv2.morphologyEx(scr,op,kernel[,anchor[,iterations[,borderType[,borderValue]]]])

op类型:
OpenCV图像处理技术(Python)——形态学操作_第3张图片

4.开运算

作用: 开运算进行的操作是先将图像腐蚀,在对腐蚀的结果进行膨胀。开运算可以用于去噪、计数等。

语法格式:

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

代码如下:

import cv2
import numpy as np
img=cv2.imread('j.bmp')
kernel = np.ones((5,5),np.uint8) 
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
cv2.imshow('img', img)
cv2.imshow('opening', opening)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:
OpenCV图像处理技术(Python)——形态学操作_第4张图片

5.闭运算

作用: 闭运算是先膨胀、后腐蚀的运算,它有助于关闭前景物体内部的小孔,或去除物体上的小黑点,还可以将不同的前景进行连接。

语法格式:

opening=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)

代码如下:

import cv2
import numpy as np
img=cv2.imread('j.bmp')
kernel = np.ones((5,5),np.uint8) 
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
cv2.imshow('img', img)
cv2.imshow('closing', closing)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:
OpenCV图像处理技术(Python)——形态学操作_第5张图片

6.礼帽运算

作用: 礼帽运算是通过原始图像减去其开运算图像的操作。礼帽运算能获取图像的噪声信息,或者得到比原始图像的边缘更亮的边缘信息。

· 礼帽 = 原始输入-开运算结果

语法格式:

opening=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)

代码如下:

import cv2
import numpy as np
img=cv2.imread('j.bmp')
kernel = np.ones((5,5),np.uint8) 
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
cv2.imshow('img', img)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:
OpenCV图像处理技术(Python)——形态学操作_第6张图片

7.黑帽运算

作用: 黑帽运算是通过闭运算图像减去原始图像的操作。黑帽运算能获取图像内部的小孔,或前景中的小黑点,或者得到比原始图像的边缘更暗的边缘部分。

· 黑帽 = 闭运算-原始输入

语法格式:

dst = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT, kernel)

代码如下:

import cv2
import numpy as np
img=cv2.imread('j.bmp')
kernel = np.ones((5,5),np.uint8) 
blackhat  = cv2.morphologyEx(img,cv2.MORPH_BLACKHAT, kernel)
cv2.imshow('img', img)
cv2.imshow('blackhat', blackhat )
cv2.waitKey(0)
cv2.destroyAllWindows()

结果如下:
OpenCV图像处理技术(Python)——形态学操作_第7张图片

8.核函数

作用: 用来返回一个用于形态学操作的指定大小和形状的结构元素。

语法格式:
retval=cv2.getStructuringElement(shape,ksize[,anchor])

·shape代表形状类型。
| 形状类型

类型 说明
cv2.MORPH_RECT 矩形结构元素。所有元素值都是1
cv2MORPH_CROSS. 十字形结构元素。对角线元素值为1
cv2.MORPH_ELLIPSE 椭圆结构元素

·ksize代表结构元素的大小。

三、总结

形态学操作可以去除图像的噪声、小黑点等,在视觉检测、文字识别、医学图像处理、图像压缩编码等领域都有非常重要的应用。

你可能感兴趣的:(OpenCV,opencv)