Python openCV モルフォロジー変換

モルフォロジー変換こちらをやってみた
収縮(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()

             

コメント

このブログの人気の投稿

Python OpenCVとWebカメラでバーコードリーダー

OpenCV 画像の足し算

OpenCV3とPython3で形状のある物体の輪郭と方向を認識する(主成分分析:PCA、固有ベクトル)