【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
MotiveOpenCVを使って長い動画を一部だけ保存する方法から政見放送の動画をデータセットとして画像処理してきたが、今回は 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をダウングレード・アップグレードするコマンド

新着記事

新着記事はこちら。

【東京駅】松戸富田麺絆でつけ麺。支店が東京にあった
【新宿御苑】Under the Treeというカフェでアイス
【西荻窪】日本茶を楽しめる店「Satén japanese tea」
【中野】陸蒸気で昼食に焼き魚定食
【下北沢】外観がファンキーなスープカレーの店マジックスパイス

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