Help us understand the problem. What is going on with this article?

OpenCVとPythonで画像の自動補間(Fast Marching Method, Navier-Stokes)

More than 3 years have passed since last update.

はじめに

 スキャンされた写真からごみや傷を除去したり,静止画や動画から不要な物体を削除したりするというのをOpenCVとPythonを使ってプログラムでやってみます。

今回は、電線を消してみます。

◎ 入力画像
img.jpg

◎ マスク
mask.jpg

◎ 結果
result.jpg

cv2.inpaint

inpaint(src, inpaintMask, inpaintRadius, flags[, dst]) -> dst

入力画像にマスクを適用し、マスク部分をマスク境界周囲の画像をもとに内側に向かって補間してくれます。

  • src - 入力画像.8ビット,1あるいは3チャンネル.
  • inpaintMask - マスク.8ビット,1チャンネルの修復マスク.非0のピクセルが,修復が必要な領域を表します.
  • inpaintRadius - 修復される各点を中心とする近傍円形領域の半径.この領域が,アルゴリズムに考慮されます.
  • flags - 修復手法.以下のいずれかです:
    • INPAINT_NS - ナビエ・ストークス(Navier-Stokes)ベースの手法.
    • INPAINT_TELEA - Alexandru Telea による手法.

プログラム

inpaint.py
# -*- coding: utf-8 -*-

import cv2

# オリジナル画像
img = cv2.imread('img.jpg')
# マスク
mask = cv2.imread('mask.png',0)

# 画像補正
dst = cv2.inpaint(img, mask, 3, cv2.INPAINT_TELEA)
#dst = cv2.inpaint(img, mask, 3, cv2.INPAINT_NS)

# 表示
cv2.imshow('dst',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 保存
cv2.imwrite('result.jpg', dst)

OpenCV : 3.1.0
Python : 3.5.2

OpenCVとPython環境の構築は、こちらを参考にしてください。(リンク

おわりに

 マスクの周囲のピクセルからマスク内の画素を補間していくため、マスクの周囲が比較的フラットな感じの画像だとうまくいきます。逆に、周囲が複雑なパターンだと、うまくいきません。
 マスクは、消したい部分をマスクしきれていないと、ノイズが現れます。また、マスクの形状に問題があると、マスク部分がすかしのように現れてしまうことがありました。

 PhotoShopでも同じような画像操作が可能ですが、手動で行うことになります。OpenCVを使えば、プログラムの中で行うことができるため、動画への適用も可能になってきます。プライバシー保護のため、動画内の人を自動的に抽出し、その部分を今回の方法で自動的に補完するようなことも使えそうです。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away