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

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

MENU

【第10回】OpenCVを用いた画像内のダメージ補修

はじめに

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

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

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

画像処理をしていると画像内にダメージが入るケースがあり、それを補修したくなりますよね。そんな時はOpenCVを用いてダメージ補修を実施してみましょう。

本記事ではOpenCVを用いた画像内のダメージ補修の方法を簡単に紹介します。

SAMURAI TERAKOYA

 

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

本記事では画像処理という単語に対してよく使用される関連後のワードクラウドの図を使用します。それにペイントで白い線のダメージを加えたものです。

 

2. ダメージ補修

基本的な処理はこちらのオブジェクト除去と同じとなっています。

chantastu.hatenablog.com

 

一般的には、除去部分を記したマスク画像を用意して、cv2.inpaint()を用いてダメージ補修をします。

まずはダメージ部分を記したマスク画像を用意します。今回はcv2.threshold()で二値化して自動でマスク画像を生成しました。除去したい箇所を白くし、そのまま残したい部分は黒くします。

マスク画像を用意する内容は以下です。

今回用意したマスク画像は以下です。

 

それでは、cv2.inpaint()を用いてダメージ補修を行いたいと思います。

img = cv2. npaint(src, inpaintMask, inpaintRadius, flags)

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

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

 

それではダメージ補修をしていきましょう。

出力結果は以下の様になります。きれいに白い線がなくなっていますが、微妙に文字が崩れている箇所があるのがわかると思います。こちらはマスク画像の生成で閾値を調整すること、ダメージ補修のcv2.inpaint()の変数を調整することで改善が見込めます。

 

オススメ書籍

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

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

 

スキル修得&転職

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

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

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

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

 

おわりに

本記事ではOpenCVを用いた画像内のダメージ補修の方法を簡単に紹介しました。本記事では文字の書かれたワードクラウドの画像からマスク画像をcv2.threshold()を用いて二値化して生成し、cv2.inpaint()を用いて白い線を除去しました。画像内の不要なものが写り込み、それを除去したいケースが多いかと思いますので、こちらの手法を活用していきましょう。マスク画像の自動生成もOpenCVで行えると、かなり簡単にオブジェクト除去ができますので、そちらも一緒に考えると良いかと思います。