PythonとOpenCVの画像処理入門|エンボス、シャープネス、セピア、ぼかしのフィルタを解説

スポンサーリンク

皆さんもSNSやカメラで様々なフィルターを試されたことがあると思います。

この記事では、画像にいくつかのフィルタを適用していきます。エキサイティングでしょう?

さあ、始めましょう。

スポンサーリンク

1. モジュールのインポート

最初のステップは、OpenCV, matplotlib, numpy モジュールを含む必要なモジュールをインポートすることです。また、より良い視覚化のために、プロットスタイルをseabornに変更します。

1
2
3
4
import cv2
import matplotlib.pyplot as plt
import numpy as np
plt.style.use('seaborn')

2. 初期画像の読み込み

ここでは, imread 関数を用いて画像の読み込みと保存を行い, cvtColor 関数を用いて色を RGB 形式に変換した後, imshow 関数を用いて画像をプロットします.

1
2
3
4
5
6
loaded_img = cv2.imread("image1.jpg")
loaded_img = cv2.cvtColor(loaded_img,cv2.COLOR_BGR2RGB)
plt.figure(figsize=(8,8))
plt.imshow(loaded_img,cmap="gray")
plt.axis("off")
plt.show()

イメージは、コードファイルと同じディレクトリに保存されていることを確認してください。

2. フィルタの作成

画像が読み込まれ、作業できる状態になったので、まず各フィルタのカーネルを作成し、カーネルの値を2Dフィルタに変換することで、独自のフィルタを作成することにします。

    1. カーネルとは?

カーネルはnumpyの配列を使って定義されます。基本的には2次元の行列で、画像をシャープにしたり、ぼかしたり、エンボス加工を正しく行うための正確な値を定義します。

  1. 2Dフィルタの作成

カーネルの値と読み込んだ画像を畳み込みネットワークに入れ、2D Filtersを作成します。

2.1 エンボスフィルター

画像にエンボスフィルターをかけるためのコードを以下に示す。まず、エンボスカーネルとエンボス効果を得るためのフィルターを作成します。

1
2
3
4
5
6
Emboss_Kernel = np.array([[0,-1,-1],[1,0,-1],[1,1,0]])
Emboss_Effect_Img = cv2.filter2D(src=loaded_img, kernel=Emboss_Kernel, ddepth=-1)
plt.figure(figsize=(8,8))
plt.imshow(Emboss_Effect_Img,cmap="gray")
plt.axis("off")
plt.show()

2.2 シャープネス・フィルター

画像にシャープネス・フィルターをかけるためのコードを以下に示す。まず、シャープカーネルと、シャープ効果を得るためのフィルターを作成します。

1
2
3
4
5
6
Sharpen_Kernel = np.array([[-1, -1, -1], [-1, 9, -1], [-1, -1, -1]])
Sharpen_Effect_Img = cv2.filter2D(src=loaded_img, kernel=Sharpen_Kernel, ddepth=-1)
plt.figure(figsize=(8,8))
plt.imshow(Sharpen_Effect_Img,cmap="gray")
plt.axis("off")
plt.show()

2.3 セピアフィルター

画像にセピアフィルターをかけるためのコードを以下に示します。まず、セピアカーネルとセピア効果のためのフィルタを作成します。

1
2
3
4
5
6
Sepia_Kernel = np.array([[0.272, 0.534, 0.131],[0.349, 0.686, 0.168],[0.393, 0.769, 0.189]])
Sepia_Effect_Img = cv2.filter2D(src=loaded_img, kernel=Sepia_Kernel, ddepth=-1)
plt.figure(figsize=(8,8))
plt.imshow(Sepia_Effect_Img,cmap="gray")
plt.axis("off")
plt.show()

2.4 ぼかしフィルター

画像にブラーフィルターをかけるためのコードを以下に示す。まず、ぼかしカーネルと、ぼかし効果を得るためのフィルターを作成します。

1
2
3
4
5
Blur_Effect_Img = cv2.GaussianBlur(loaded_img, (35, 35), 0)
plt.figure(figsize=(8,8))
plt.imshow(Blur_Effect_Img,cmap="gray")
plt.axis("off")
plt.show()

最終的な出力

下図は、すべてのフィルタを画像に順次適用したものです。

Filters to images Using OpenCV Output
Filters Using OpenCV Output

同じフィルターを別の画像に適用した場合の出力は以下のようになります。

Filters to images Using OpenCV Output2
Filters Using OpenCV Output2

まとめ

今日は、独自のフィルターを作成し、画像に適用する方法を学びました。

ぜひ試してみてください。ハッピーコーディング!

タイトルとURLをコピーしました