礼帽运算是用原始图像减去其开运算图像的操作。黑帽运算是用闭运算减去原始图像的操作。可用核函数构造一些形状特殊的核。

礼帽运算

礼帽运算是用原始图像减去其开运算图像的操作。

礼帽运算能够获取图像的噪声信息,或者得到比原始图像的边缘更亮的边缘信息

语法

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

演示

分别演示《获取噪声》《获取更亮的边缘信息》两种效果。

import cv2
import numpy as np
img1 = cv2.imread(r'E:\Blog\OpenCV\newsu.png',0)       
kernel1 = np.ones((5,5),np.uint8)        
RESULT1 = cv2.morphologyEx(img1,cv2.MORPH_TOPHAT,kernel1)     

img2 = cv2.imread(r'E:\Blog\OpenCV\mn.png',0)       
kernel2 = np.ones((2,2),np.uint8)        
RESULT2 = cv2.morphologyEx(img2,cv2.MORPH_TOPHAT,kernel2)    

cv2.imshow('IMG',img1)
cv2.imshow('RESULT1',RESULT1)    
cv2.imshow('IMG2',img2)
cv2.imshow('RESULT2',RESULT2)   
cv2.waitKey()

实现效果

黑帽运算

黑帽运算是用闭运算减去原始图像的操作。

黑帽运算能够获取图像内部的小孔,或者前景色中的小黑点。或者得到比原始图像更暗的边缘部分

语法

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

示例

import cv2
import numpy as np
img1 = cv2.imread(r'E:\Blog\OpenCV\jian1.png',0)       
kernel1 = np.ones((7,7),np.uint8)        
RESULT1 = cv2.morphologyEx(img1,cv2.MORPH_BLACKHAT,kernel1)     

img2 = cv2.imread(r'E:\Blog\OpenCV\mn.png',0)       
kernel2 = np.ones((2,2),np.uint8)        
RESULT2 = cv2.morphologyEx(img2,cv2.MORPH_BLACKHAT,kernel2)    

cv2.imshow('IMG',img1)
cv2.imshow('RESULT1',RESULT1)    
cv2.imshow('IMG2',img2)
cv2.imshow('RESULT2',RESULT2)   
cv2.waitKey()

运行效果

核函数

在进行形态学操作时,必须要使用一个结构元,即核。该核可以自定义生成。也可以用cv2.getStructuringElement()构造。

语法:

retval = cv2.getStructuringElement(shape, ksize [, anchor])
  • shape代表形状类型,可能的值为:
    | 类型 | 说明 |
    | :---------------: | :--------------: |
    | cv2.MORPH_RECT | 矩形结构的元素 |
    | cv2.MORPH_CROSS | 十字架结构元素 |
    | cv2.MORPH_ELLIPSE | 椭圆形结构的元素 |

  • ksize表示结构元素的大小

  • anchor表示结构元素中的锚点位置

import cv2
k1 = cv2.getStructuringElement(cv2.MORPH_RECT,(5,5))
k2 = cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5))
k3 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
print('k1=\n',k1)
print('k2=\n',k2)
print('k3=\n',k3)

运行结果:

k1=
 [[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]]
k2=
 [[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]]
k3=
 [[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]]

图形示意


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/OpenCV28.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 06 月 12 日
如果觉得我的文章对你有用,请随意赞赏