【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をダウングレード・アップグレードするコマンド

新着記事

新着記事はこちら。

【Ubuntu】マウスカーソル速度を上げる方法【xinput】
【Ubuntu22】Brave Browserで「公開鍵を利用できないため、以下の署名は検証できませんでした」が出た場合の対応
【インド】バンガロールから日本へ帰国。機内食は豪華
【インド】帰国後の寿司が美味い【羽田空港】
寿司打記録更新

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