単純なモルフォロジー演算は、画像の形状に従って行われます。一般に2値化された画像の操作を行います。
明るい領域の拡張:;:拡張腐食明るい領域を減少させます
腐食
この操作は、腐食したオブジェクトの境界をフォアグラウンドます(ただし、見通しは白のまま)。
原理:画素Aの最小値に対応する画像A及びBに沿って畳み込みカーネルBスライドが中心点に割り当てられます。
二値画像のために、原画像の全ての画素値は、畳み込みに確認する必要がある場合、1 、それ以外の場合はゼロになり、その後、元の画素値を維持するための中心的な要素。
コード:
1つの インポートNP AS numpyの
2 インポートCV2
。3 から matplotlibのインポートPLT AS pyplot
。4
。5 #グレースケール画像読み出しモードを
6 IMG = cv2.imreadは(" ../image/girl.jpg " 、cv2.IMREAD_GRAYSCALE)
。7
。8 #生成します図8に示すように、畳み込みカーネルの深さ
。9カーネルnp.ones =((5 ,. 5 )、np.uint8)
10
。11 #反復は、反復回数を表し
12で浸食= cv2.erode(IMG、カーネル、反復さ= 1 )
13は、
14 PLT .subplot(121)、plt.imshow(IMG、CMapの= " グレー")、plt.title(" オリジナル" )
15 plt.subplot(122)、plt.imshow(浸食、CMAP = " グレー")、plt.title(" エロージョン" )
16 plt.show()
結果:
一般的なグレースケールは、バイナリイメージに変換しました:
うねり
原理:画像Aに沿って畳み込みカーネルBスライド、及び画素Aに対応する最大値Bは、中心点に割り当てられます。
二値画像のために、原画像が限りの画素値が存在するように畳み込みチェックに対応する場合は 1 、それは中央要素1です。
コード:
1つの拡張= cv2.dilate(IMG、カーネル、反復= 1)
結果:
一般的なグレースケール:バイナリイメージに変換:
オープンコンピューティング
画像である第一の拡張、その後、エッチングが主にホワイトノイズのうち、画像に使用され、次の2つの別々の画像オブジェクトを貼り付けてもよいです。
函数是 cv2.morphologyEx(src, op, kernel, dst=None, anchor=None, iterations=None, borderType=None, borderValue=None)
代码:
1 import numpy as np
2 import cv2
3 from matplotlib import pyplot as plt
4
5 # 灰度模式读取图像
6 img = cv2.imread("../image/erosion.jpg", cv2.IMREAD_GRAYSCALE)
7 # ret, img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)
8
9 # 生成深度为8的卷积核
10 kernel = np.ones((5, 5), np.uint8)
11
12 # cv2.MORPH_OPEN表示开运算
13 opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
14
15 plt.subplot(121), plt.imshow(img, cmap="gray"), plt.title("Original")
16 plt.subplot(122), plt.imshow(opening, cmap="gray"), plt.title("Opening")
17 plt.show()
结果:
闭运算
先膨胀再腐蚀。它经常被用来填充前景物体中的小洞,或者前景物体上的小黑点。
代码:
# cv2.MORPH_CLOSE表示闭运算 close = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
结果:
形态学梯度
它是膨胀与腐蚀的差,该操作能描述图像亮度变化的剧烈程度。当我们想突出高亮区域的外围时,通常可以使用形态学梯度,因为从原区域的膨胀中减去了原区域的收缩,所以留下了图像的外围边缘
代码:
# cv2.MORPH_GRADIENT 表示形态学梯度 gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
结果:
礼貌、黑帽
礼貌操作时原始图像与进行开运算后的图像的差。
黑帽操作是进行闭运算得到的图像与原始图像的差
开运算带来的结果是放大裂缝或局部低亮度区域,因此A - Open(A)可以突出比A周围的区域更明亮的区域,并跟核的大小相关;相反,黑帽操作则能突出比A的周围区域黑暗的区域
代码:
# cv2.MORPH_TOPHAT 表示礼貌操作 tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel) # cv2.MORPH_BLACKHAT 表示黑帽 # gradient = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
结果:
礼貌: 黑帽: