【Python/OpenCV】cv2.dilateとcv2.erodeで膨張・収縮処理してノイズを除去

Python版OpenCV(cv2.dilate, cv2.erode)もしくはNumPyで膨張・収縮フィルタ処理を実装する方法をソースコード付きで解説します。

膨張・収縮フィルタとは

本ページの内容は以下動画で解説しています。

膨張・収縮フィルタとは、二値画像からノイズ除去したりするのに使われるアルゴリズムです。
x

  • 膨張処理
    • 白色(255)の領域を膨張
  • 収縮処理
    • 白色(255)の領域を収縮
【画像処理】膨張・収縮処理の原理・特徴・計算式
この記事では、画像処理における膨張・収縮処理の原理や特徴、計算式についてまとめました。

■クロージング処理の例

※入力画像(左)→膨張画像(中央)→収縮画像(右)

今回は、以下の2通りの方法で処理を実装してみました。

方法・・・NumPyで膨張・収縮フィルタのアルゴリズムを書いて実装
方法②・・・OpenCVで簡単に実装

書式

dst = cv2.dilate(src, kernel, iterations) # 膨張処理
dst = cv2.erode(src, kernel, iterations) # 収縮処理
パラメータ名 説明
src 入力画像
kernel カーネル(1の近傍画素を膨張・収縮処理に利用)
dst 出力画像

ソースコード(Python3+OpenCV3)

サンプルプログラムのソースコードです。
【方法1】


【方法2】


入力画像(input.png) → 膨張画像(dilate.png) → 収縮画像(erode.png)

関連ページ

【Python版OpenCV入門】画像処理の基礎〜応用例までサンプルコード付きで徹底解説
Python版OpenCVで画像処理プログラミングを行う方法を入門者向けにソースコード付きで解説するページです。
Python基礎
「Python基礎」の記事一覧です。

コメント

  1. 中村和樹 より:

    参考にさせていただきました。
    ありがとうございます。
    1つ質問したいことがあります。
    カーネルの値が6に設定されていますが、8近傍の場合3×3のカーネルサイズのため、値を3に設定するべきではないのでしょうか?
    よろしくお願いします。

    • 管理人 より:

      ※中村和樹 様
      ご報告ありがとうございます。
      ご指摘頂いたとおり、「8近傍」という記載は誤りですね。
      該当箇所は修正致しました。