이미지 복구 (inpaint)를 사용하여 객체 지우기 (OpenCV : Python)
Motive
OpenCV를 사용하여 긴 동영상을 일부만 저장하는 방법 으로부터 마사미 방송의 동영상을 데이터 세트로서 화상 처리해 왔지만, 이번은 inpaint
(이미지 수복)를 사용해 오브젝트 소거해 본다. 이유로는 배경이 단조롭고 시간의 텔롭과 정당명의 플래카드 이외 아무것도 찍히지 않았기 때문에 수리가 쉽지 않을까 생각했기 때문입니다.
Dataset
여기에서는 동영상이 아닌 아래의 한 장의 캡처를 사용합니다.
Method
마스크 이미지를 미리 작성하고 수리(오브젝트 삭제)하고 싶은 부분을 흰색으로 칠합니다.
그 후,cv2.inpaint(src,mask,1,cv2.INPAINT_TELEA)
를 사용하여 처리합니다.
개발
import cv2
import os
import numpy as np
def inpaint(src,top,bottom):
mask = np.zeros((*src.shape[:-1],1), dtype=np.uint8)
mask = cv2.rectangle(mask,
top,
bottom,
color=(255,255,255),
thickness=cv2.FILLED
)
dst = cv2.inpaint(src,mask,1,cv2.INPAINT_TELEA)
return dst
if __name__ == '__main__':
window_name = "Drop Out NHK"
mat = cv2.imread("capture_1.png")
mat = cv2.resize(mat, None, fx = 0.5, fy = 0.5)
dst = inpaint(mat,(200,40),(440,110))
dst = inpaint(dst,(40,25),(115,65))
cv2.imshow(window_name, dst)
cv2.waitKey(0)
cv2.destroyWindow(window_name)
Result
생각했던 것 이상으로 처리를 할 수 있었습니다.
시간이나 정당명이 표시되어 있었다고는 생각되지 않을 정도입니다.
Future
개발 노트 69 OpenCV 3.2 with Contrib 모듈에서 Inpaint 사용
를 보면 C++에 cv2.inpaint
보다 정밀도가 높은 function이 있는 것 같습니다.
어쩌면 C++를 사용하면 자막이 좋은 느낌으로 지울 수 있을지도 모릅니다.
Reference
여기에서는 동영상이 아닌 아래의 한 장의 캡처를 사용합니다.
Method
마스크 이미지를 미리 작성하고 수리(오브젝트 삭제)하고 싶은 부분을 흰색으로 칠합니다.
그 후,cv2.inpaint(src,mask,1,cv2.INPAINT_TELEA)
를 사용하여 처리합니다.
개발
import cv2
import os
import numpy as np
def inpaint(src,top,bottom):
mask = np.zeros((*src.shape[:-1],1), dtype=np.uint8)
mask = cv2.rectangle(mask,
top,
bottom,
color=(255,255,255),
thickness=cv2.FILLED
)
dst = cv2.inpaint(src,mask,1,cv2.INPAINT_TELEA)
return dst
if __name__ == '__main__':
window_name = "Drop Out NHK"
mat = cv2.imread("capture_1.png")
mat = cv2.resize(mat, None, fx = 0.5, fy = 0.5)
dst = inpaint(mat,(200,40),(440,110))
dst = inpaint(dst,(40,25),(115,65))
cv2.imshow(window_name, dst)
cv2.waitKey(0)
cv2.destroyWindow(window_name)
Result
생각했던 것 이상으로 처리를 할 수 있었습니다.
시간이나 정당명이 표시되어 있었다고는 생각되지 않을 정도입니다.
Future
개발 노트 69 OpenCV 3.2 with Contrib 모듈에서 Inpaint 사용
를 보면 C++에 cv2.inpaint
보다 정밀도가 높은 function이 있는 것 같습니다.
어쩌면 C++를 사용하면 자막이 좋은 느낌으로 지울 수 있을지도 모릅니다.
Reference
import cv2
import os
import numpy as np
def inpaint(src,top,bottom):
mask = np.zeros((*src.shape[:-1],1), dtype=np.uint8)
mask = cv2.rectangle(mask,
top,
bottom,
color=(255,255,255),
thickness=cv2.FILLED
)
dst = cv2.inpaint(src,mask,1,cv2.INPAINT_TELEA)
return dst
if __name__ == '__main__':
window_name = "Drop Out NHK"
mat = cv2.imread("capture_1.png")
mat = cv2.resize(mat, None, fx = 0.5, fy = 0.5)
dst = inpaint(mat,(200,40),(440,110))
dst = inpaint(dst,(40,25),(115,65))
cv2.imshow(window_name, dst)
cv2.waitKey(0)
cv2.destroyWindow(window_name)
Result
생각했던 것 이상으로 처리를 할 수 있었습니다.
시간이나 정당명이 표시되어 있었다고는 생각되지 않을 정도입니다.
Future
개발 노트 69 OpenCV 3.2 with Contrib 모듈에서 Inpaint 사용
를 보면 C++에 cv2.inpaint
보다 정밀도가 높은 function이 있는 것 같습니다.
어쩌면 C++를 사용하면 자막이 좋은 느낌으로 지울 수 있을지도 모릅니다.
Reference
개발 노트 69 OpenCV 3.2 with Contrib 모듈에서 Inpaint 사용
를 보면 C++에
cv2.inpaint
보다 정밀도가 높은 function이 있는 것 같습니다.어쩌면 C++를 사용하면 자막이 좋은 느낌으로 지울 수 있을지도 모릅니다.
Reference
Reference
이 문제에 관하여(이미지 복구 (inpaint)를 사용하여 객체 지우기 (OpenCV : Python)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/satsukiya/items/8f6d33257056fff275f6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)