`

opencv_python学习笔记十四

阅读更多

17 形态学转换

形态学操作:

腐蚀 膨胀 开运算 闭运算

常用函数:

cv2.erode()
cv2.dilate()
cv2.morphologyEx()

1 腐蚀

def erode(src, #源图像

kernel, #腐蚀操作的内核

dst=None, #输出图像

anchor=None, #内核中心点

iterations=None, #腐蚀次数

borderType=None, #推断边缘类型

borderValue=None)#边缘值

2 膨胀

def dilate(src, #源图像

kernel, #腐蚀操作的内核

dst=None, #输出图像

anchor=None, #内核中心点

iterations=None, #腐蚀次数

borderType=None, #推断边缘类型

borderValue=None)#边缘值

3 开运算

先腐蚀再膨胀

4 闭运算

先膨胀再腐蚀

5 形态学梯度

膨胀与腐蚀的差别

6 礼帽

原始图像与进行开运算进行后的图像的差

7 黑帽

进行闭运算之后得到的图像与原始图像的差

函数原型

def morphologyEx(src, #输入图像

op, #形态学运算类型

kernel, #内核

dst=None, #输出图像

anchor=None, #中心锚点

iterations=None, #函数迭代次数

borderType=None, #边界模式

borderValue=None)#常数边界值

结构化元素

print(cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)))
print(cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5)))
print(cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5)))

输出结果如下:

[[1 1 1 1 1]

[1 1 1 1 1]

[1 1 1 1 1]

[1 1 1 1 1]

[1 1 1 1 1]]

[[0 0 1 0 0]

[1 1 1 1 1]

[1 1 1 1 1]

[1 1 1 1 1]

[0 0 1 0 0]]

[[0 0 1 0 0]

[0 0 1 0 0]

[1 1 1 1 1]

[0 0 1 0 0]

[0 0 1 0 0]]

示例代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2016/11/17 14:59
# @Author : Retacn
# @Site :
# @File : imageErode.py
# @Software: PyCharm

import cv2
import numpy as np
from matplotlib import pyplot as plt

img=cv2.imread('../j.png')
kernel=np.ones((5,5),np.uint8)


#腐蚀
dst1=cv2.erode(img,kernel,iterations=1)

#膨胀
dst2=cv2.dilate(img,kernel,iterations=1)

#开运算
dst3=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)

#闭运算
dst4=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)

#形态梯度学
dst5=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)

#礼帽
dst6=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)

#黑帽
dst7=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)


#正常
plt.subplot(331),plt.imshow(img),plt.title('Normal')
plt.xticks([]),plt.yticks([])
#腐蚀
plt.subplot(332),plt.imshow(dst1),plt.title('Erode')
plt.xticks([]),plt.yticks([])
#膨胀
plt.subplot(333),plt.imshow(dst2),plt.title('Open')
plt.xticks([]),plt.yticks([])
#开运算
plt.subplot(334),plt.imshow(dst3),plt.title('Close')
plt.xticks([]),plt.yticks([])
#闭运算
plt.subplot(335),plt.imshow(dst4),plt.title('Dilate')
plt.xticks([]),plt.yticks([])
#形态学梯度
plt.subplot(336),plt.imshow(dst5),plt.title('Gradient')
plt.xticks([]),plt.yticks([])
#礼帽
plt.subplot(337),plt.imshow(dst6),plt.title('TopHat')
plt.xticks([]),plt.yticks([])
#黑帽
plt.subplot(338),plt.imshow(dst7),plt.title('BlackHat')
plt.xticks([]),plt.yticks([])

#输出结构化元素
print(cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)))
print(cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5)))
print(cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5)))

plt.show()

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics