【OpenCV】inpaintを使ってオブジェクト(矩形)を画像から消去するコード
物体検出(SSD)でキャベツ列を検出して出力された矩形(赤色の長方形)を消したいと思って調べたら、OpenCVのinpaint関数が使えるようだった。
学習用データ用に矩形のない生の画像データが欲しかったので試した。
コード【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を使ってプログラムでやってみます。今回は、電線を消してみます。◎ 入力画…
人気記事
人気記事はこちら。
新着記事
新着記事はこちら。