【OpenCV】inpaintを使ってオブジェクト(矩形)を画像から消去するコード【Python】

スポンサーリンク

【OpenCV】inpaintを使ってオブジェクト(矩形)を画像から消去するコード

物体検出(SSD)でキャベツ列を検出して出力された矩形(赤色の長方形)を消したいと思って調べたら、OpenCVinpaint関数が使えるようだった。

学習用データ用に矩形のない生の画像データが欲しかったので試した。

コード【Python】

コードは↓
今回は動画から矩形を消すこととした。

#!/usr/bin/env python
# coding: utf-8

import numpy as np
import cv2 

cap = cv2.VideoCapture('cabbage.mp4')
fourcc = cv2.VideoWriter_fourcc('m','p','4','v')
out = cv2.VideoWriter('cabbage_inpainted.mp4', fourcc, 20.0, (int(cap.get(3)), int(cap.get(4))))

# マスクを作成(これは2値画像で、消したい部分のみを白色にする)
mask = np.zeros((int(cap.get(4)), int(cap.get(3))), dtype=np.uint8)
# (550,100)と(750,600)は赤色の矩形の頂点の座標
mask = cv2.rectangle(mask, (550,100), (750,600), color=(255,255,255),thickness=2)

while(cap.isOpened()):
    ret, frame = cap.read()
 
    if ret == True:

        frame = cv2.inpaint(frame, mask, 3, cv2.INPAINT_TELEA)
    
        cv2.imshow('inpainted', frame)
        out.write(frame)
    
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
  else:
        break

cap.release()
out.release()
cv2.destroyAllWindows()

これを実行すると結果は以下のようになった。

赤色の矩形を消すことができた。
消した部分も特に違和感はなかった。(少しぼやけたりすることはある)

参考

以下のサイトを参考にした。

画像修復(inpaint)を使ってオブジェクト消去したった(OpenCV:Python) - Qiita
Motive OpenCVを使って長い動画を一部だけ保存する方法から政見放送の動画をデータセットとして画像処理してきたが、今回は inpaint(画像修復)を使ってオブジェクト消去してみる。理由としては背景が単調で時刻のテロップ...
OpenCVとPythonで画像の自動補間(Fast Marching Method, Navier-Stokes) - Qiita
はじめに  スキャンされた写真からごみや傷を除去したり,静止画や動画から不要な物体を削除したりするというのをOpenCVとPythonを使ってプログラムでやってみます。 今回は、電線を消してみます。 ◎ 入力画像 ◎ マ...

人気記事

人気記事はこちら。

CUDA、cuDNNのバージョンをターミナルで調べるコマンド
【Pytorch】テンソルを連結する方法(cat・stack)
【Pytorch】テンソルの次元を追加・削除する方法【dim】
【Protobuf】"TypeError: Descriptors cannot not be created directly."を解決する【solved】
【Python】Tensorflowをダウングレード・アップグレードするコマンド

新着記事

新着記事はこちら。

【インド】ハイデラバードからバンガロールへ移動
Ubuntu20.04でRealSenseの環境構築を行う。realsense-rosも。コマンド。
インド工科大学ハイデラバード校を訪問。宿泊も。
【インド】Shilparamamで伝統工芸品などを見て回る。Tシャツを購入。【ハイデラバード】
【インド】ハイデラバードのショッピングモールでお土産を購入。ゲームセンターも

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