実行環境
Google Colaboratoryで画像を読み込む為の準備
from google.colab import files
from google.colab import drive
drive.mount('/content/drive')
必要なライブラリの読み込み
import cv2 #opencv
import matplotlib.pyplot as plt
%matplotlib inline
画像準備
img = plt.imread("/content/drive/My Drive/Colab Notebooks/img/Lenna.bmp")
gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
処理
plt.figure(figsize=(9, 9), dpi=100,
facecolor='w', linewidth=0, edgecolor='w')
plt.gray()
# オリジナル画像
plt.subplot(2,3,1)
plt.axis('off')
plt.title("Original", fontsize=10)
plt.imshow(gray)
# 縮小(フィルタは見やすい用に)
plt.subplot(2,3,2)
plt.axis('off')
gray = cv2.resize(gray,(5,5))
plt.title("shukusyo", fontsize=10)
plt.imshow(gray)
size = (3,3)
size2 = 3
# blur(平均値)
plt.subplot(2,3,4)
plt.axis('off')
plt.title("blur", fontsize=10)
dst = cv2.blur(gray,size)
plt.imshow(dst)
# medianBlur(中央値)
plt.subplot(2,3,5)
plt.axis('off')
plt.title("medianBlur", fontsize=10)
dst = cv2.medianBlur(gray,size2)#size2は、中央値を取るため奇数である必要あり
plt.imshow(dst)
# GAUSSIAN 処理対象画素との距離によって重みを変え計算
plt.subplot(2,3,6)
plt.axis('off')
plt.title("GAUSSIAN", fontsize=10)
sigmaX = 11
sigmaY = 11
dst = cv2.GaussianBlur(gray,size,sigmaX,sigmaY)
plt.imshow(dst)
plt.show()
結果
変化がわかりやすいように、
画像を5×5に圧縮してから各種処理を実施しました。
計算イメージはこんな感じです。(cv2.blur(gray,(3,3))の例)
3×3の領域の平均値が、処理後の値として、入力されます。
今回は、anchor を指定していないため、中心を基準に処理されてます。
指定してあげることで処理位置を変えられるようです。
また、外周の枠を超える計算方法の詳細は下記リンクがわかりやすかったです。
今回は未指定なので
border=Type = cv2.BORDER_DEFAULT (境界画素の中心で鏡映)
で実行されています。
http://www5d.biglobe.ne.jp/~noocyte/Programming/OpenCV.html#cv::borderInterpolate