Pythonによるデータ分析・機械学習ブログ

Pythonによるデータの前処理・グラフ化、機械学習、統計解析、画像処理、Webスクレイピング、自然言語処理の基礎について紹介していきます。

MENU

【第9回】OpenCVを用いた画像内のオブジェクト除去

はじめに

OpenCVとはインテルが開発・公開したオープンソースのコンピュータビジョン向けライブラリで、画像処理・画像解析および機械学習等の機能を持つC/C++JavaPythonMATLAB用ライブラリとなっています。

OpenCVには以下のような機能があります。

  • グレースケール化
  • 2値化
  • 輪郭の検出
  • 顔検出
  • ノイズ除去
  • テンプレートマッチング

画像処理をしていると画像内に不要なものがあるケースがあり、それを除去したくなりますよね。そんな時はOpenCVを用いてオブジェクト除去を実施してみましょう。

本記事ではOpenCVを用いた画像内のオブジェクト除去の方法を簡単に紹介します。

SAMURAI TERAKOYA

 

1. 本記事で使用する画像

本記事で使用する画像は以下の長野県信州市にある元善光寺の入り口の画像です。

 

2. オブジェクト除去

本記事では上図の元善光寺の看板の「元善光寺」の文字を除去してみたいと思います。

一般的には、除去部分を記したマスク画像を用意して、cv2.inpaint()を用いてオブジェクト除去をします。

まずは除去部分を記したマスク画像を用意します。今回は手動にてマスク画像を生成しました。除去したい箇所を白くし、そのまま残したい部分は黒くします。自動的に行いたい場合はcv2.threshold()で二値化すると良いと思います。今回用意したマスク画像は以下です。

 

続いて、cv2.inpaint()を用いてオブジェクト除去を行いたいと思います。

img = inpaint(src, inpaintMask, inpaintRadius, flags)

引数は以下の表の内容です。

引数 内容
src オブジェクトを除去したい画像データ
inpaintMask 修復用マスク画像
inpaintRadius 近傍円形領域の半径(周辺のピクセルをいくつ利用するか)
flags INPAINT_TELEA(Alexandru Telea法)
INPAINT_NS(Navier Stokes法)

 

それではオブジェクト除去をしていきましょう。

上記のコードを実行した結果は以下の様になります。「元善光寺」の文字が除去されたのがわかると思います。もう少しきれいに除去するには前処理や引数の調整などが必要そうですね。

 

オススメ書籍

Pythonで始めるOpenCV4プログラミング

実践OpenCV4 for Python 画像映像情報処理と機械学習

 

スキル修得&転職

 近年、DXの進展に伴うデジタル人材の需要の高まりに追いついていない状況が続いていると経済産業省がホームページで記載している通り、DX人材、IT人材が不足しているのが現状です。さらにコンピュータの性能向上やAI技術の発展により、よりDX人材、IT人材の需要が高まってきます。さらには、今後の長期間安定して職がある業種とも考えられます。

以下の求人では、IT業界の転職や、IT未経験だけどIT人材を志望する就活を支援してくれます。無料で会員登録もできるので、まずは登録だけでもして様子を見てみてはいかがでしょうか?

▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼

▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲

 

おわりに

本記事ではOpenCVを用いた画像内のオブジェクト除去の方法を簡単に紹介しました。本記事では元善光寺の看板の画像からマスク画像を手動で生成し、cv2.inpaint()を用いて「元善光寺」の文字を除去しました。画像内の不要なものが写り込み、それを除去したいケースが多いかと思いますので、こちらの手法を活用していきましょう。マスク画像の自動生成もOpenCVで行えると、かなり簡単にオブジェクト除去ができますので、そちらも一緒に考えると良いかと思います。