Python openCV モルフォロジー変換
モルフォロジー変換こちらをやってみた
収縮(Erosion)と膨張(Dilation)、およびそれを組み合わせて輪郭を取り出したり、欠点を消したり強調することができる。
plt.subplot(331)の引数は(行、列、何番目)を表す。matplotlib入門こちらを参照した。
収縮(Erosion)と膨張(Dilation)、およびそれを組み合わせて輪郭を取り出したり、欠点を消したり強調することができる。
plt.subplot(331)の引数は(行、列、何番目)を表す。matplotlib入門こちらを参照した。
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('pic.png')
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(img,kernel,iterations = 1)
dilation = cv2.dilate(img,kernel,iterations = 1)
opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel)
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)
print("# 矩形カーネル")
print(cv2.getStructuringElement(cv2.MORPH_RECT,(5,5)))
print("# 楕円形カーネル")
print(cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5)))
print("# 十字型カーネル")
print(cv2.getStructuringElement(cv2.MORPH_CROSS,(5,5)))
plt.subplot(331),plt.imshow(img),plt.title('Original')
plt.xticks([]),plt.yticks([])
plt.subplot(332),plt.imshow(erosion),plt.title('erosion ')
plt.xticks([]),plt.yticks([])
plt.subplot(333),plt.imshow(dilation),plt.title('dilation ')
plt.xticks([]),plt.yticks([])
plt.subplot(334),plt.imshow(closing),plt.title('closing ')
plt.xticks([]),plt.yticks([])
plt.subplot(335),plt.imshow(gradient),plt.title('gradient ')
plt.xticks([]),plt.yticks([])
plt.subplot(336),plt.imshow(tophat),plt.title('tophat ')
plt.xticks([]),plt.yticks([])
plt.subplot(337),plt.imshow(blackhat),plt.title('blackhat ')
plt.xticks([]),plt.yticks([])
plt.show()
コメント
コメントを投稿