【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】テンソルの次元を追加・削除する方法【dim】
【Pytorch】テンソルを連結する方法(cat・stack)
【Protobuf】"TypeError: Descriptors cannot not be created directly."を解決する【solved】
【Python】Tensorflowをダウングレード・アップグレードするコマンド

新着記事

新着記事はこちら。

【帯広】営業時間の短い「はなとかち」の豚丼を食べる。【北海道】
【伊豆】ItalianRestaurant POMODOROでランチ【静岡】
【静岡】熱海プリン本店で購入。人気で列に並ぶ。いちごプリンを食べる。
【静岡】伊豆パノラマパークで良い景色を眺める。
【伊豆】北川温泉 磯辺で夕食。Airbnbでトラストメゾン北川に宿泊【静岡】

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