1. 画像の腐食
この操作により、前景オブジェクトの境界が侵食されます。これはどのようにして可能でしょうか? コンボリューション カーネルは画像に沿ってスライドします。コンボリューション カーネルに対応する画像のピクセル値がすべて 1 の場合、この領域のピクセル値はすべて 1 になり、それ以外の場合は 0 になります。ホワイトノイズの除去、接続されている 2 つのオブジェクトの切断などに役立ちます。
構文: cv2.erode(img,kernel,iterations=1)
img:入力画像を示します。
kernel:定義されたコンボリューション カーネルを示します。
iterations:腐食の反復回数、平たく言えば腐食の回数を示します。
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("C:\\Users\\zhangqs\\Desktop\\pie.png", cv2.IMREAD_COLOR)
#腐蚀操作 将有价值的信息缩小
kernel=np.ones((30,30),np.uint8)
erode1=cv2.erode(img,kernel,iterations=1) #迭代次数1
erode2=cv2.erode(img,kernel,iterations=2) #迭代次数2
erode3=cv2.erode(img,kernel,iterations=3) #迭代次数3
res=np.hstack((img,erode1,erode2,erode3))
cv2.imshow('erode', res)
cv2.waitKey(0)
cv2.destroyAllWindows()
実行結果
2. イメージのインフレ
構文: cv2.dilate(img,kernel,iterations=2)
img:入力画像を示します。
kernel:定義されたコンボリューション カーネルを示します。
iterations:腐食の反復回数、平たく言えば腐食の回数を示します。
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("C:\\Users\\zhangqs\\Desktop\\pie.png", cv2.IMREAD_COLOR)
#膨胀操作 将有价值的信息放大
kernel=np.ones((30,30),np.uint8)
dilate1=cv2.dilate(img,kernel,iterations=1) #迭代次数1
dilate2=cv2.dilate(img,kernel,iterations=2) #迭代次数2
dilate3=cv2.dilate(img,kernel,iterations=3) #迭代次数3
res2=np.hstack((img,dilate1,dilate2,dilate3))
cv2.imshow('dilate', res2)
cv2.waitKey(0)
cv2.destroyAllWindows()
実行結果
3. オープン操作: 最初に腐食し、次に拡張します。
構文: cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("C:\\Users\\zhangqs\\Desktop\\pie.png", cv2.IMREAD_COLOR)
#开运行:先腐蚀,再膨胀
kernel=np.ones((30,30),np.uint8)
open=cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
cv2.imshow('open', open)
cv2.waitKey(0)
cv2.destroyAllWindows()
4. 密閉操作: 最初に拡張し、次に腐食します。
構文: cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("C:\\Users\\zhangqs\\Desktop\\pie.png", cv2.IMREAD_COLOR)
#闭运算:先膨胀,再腐蚀
kernel=np.ones((30,30),np.uint8)
close=cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)
cv2.imshow('close', close)
cv2.waitKey(0)
cv2.destroyAllWindows()
5. グラデーション、シルクハット、ブラックハット
勾配 = 膨張 - 侵食(cv2.MORPH_GRADIENT)
トップハット = 元の入力 - オープン演算結果 (cv2.MORPH_TOPHAT)
ブラックハット = 閉じた演算結果 - 元の入力 (cv2.MORPH_BLACKHAT)
import cv2
import matplotlib.pyplot as plt
import numpy as np
img = cv2.imread("C:\\Users\\zhangqs\\Desktop\\pie.png", cv2.IMREAD_COLOR)
#梯度=膨胀-腐蚀
kernel=np.ones((5,5),np.uint8)
gradient=cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)
cv2.imshow('gradient', gradient)
cv2.waitKey(0)
cv2.destroyAllWindows()
#礼帽=原始输入-开运算结果
kernel=np.ones((5,5),np.uint8)
tophat=cv2.morphologyEx(img,cv2.MORPH_TOPHAT,kernel)
cv2.imshow('tophat', tophat)
cv2.waitKey(0)
cv2.destroyAllWindows()
#黑帽=闭运算结果-原始输入
kernel=np.ones((5,5),np.uint8)
blackhat=cv2.morphologyEx(img,cv2.MORPH_BLACKHAT,kernel)
cv2.imshow('blackhat', blackhat)
cv2.waitKey(0)
cv2.destroyAllWindows()