Python-OpenCV 의 cv2.inpaint()함수 사용

4210 단어 OpenCVcv2.inpaint()
콘 셉 트
복 구 는 그림 플러그 인 입 니 다.디지털 복구 알고리즘 은 이미지 플러그 인,사진 복구,크기 조정 과 초 해상도 등에 서 광범 위 하 게 응용 된다.
대부분의 사람들 은 집에 오래된 퇴화 사진 을 놓 고 그 위 에 검 은 점,필획 등 이 있다.당신 은 그것 을 회복 할 생각 이 있 습 니까?우 리 는 간단하게 회화 도구 에서 그것들 을 지 울 수 없다.왜냐하면 그것 은 흰색 구조 로 검은색 구 조 를 간단하게 교체 하 는데 이것 은 쓸모 가 없 기 때문이다.이런 상황 에서 이미지 복구 라 는 기술 을 사용한다.기본 적 인 사 고 는 간단 합 니 다.이웃 의 픽 셀 로 나 쁜 표 시 를 교체 하여 이웃 처럼 보이 게 합 니 다.아래 에 표 시 된 그림 을 고려 하 십시오.

라 이브 러 리 함수

dst = cv2.inpaint(src,mask, inpaintRadius,flags)
매개 변 수 는:
  • src:8 비트 1 채널 또는 3 채널 그림 을 입력 하 십시오
  • inpaintMask:마스크 복원,8 비트 1 채널 이미지.픽 셀 이 아 닌 것 은 복구 해 야 할 영역 을 표시 합 니 다
  • dst:출력 은 src 와 같은 크기 와 유형의 그림 을 가지 고 있 습 니 다
  • inpaintRadius:알고리즘 이 고려 한 모든 점 의 원형 인접 지역 의 반지름
  • flags:
  • INPAINT_NS Navier-Tokes 기반 방법
  • Alexandru Telea 의 INPAINTTELEA 방법
  • 이루어지다
    이 를 위해 몇 가지 알고리즘 을 설 계 했 고 OpenCV 는 두 가지 알고리즘 을 제공 했다.둘 다 같은 함수 로 접근 할 수 있 습 니 다.cv2.inpaint().
    첫 번 째 알고리즘 은 Alexandru Telea 가 2004 년 에 발표 한'빠 른 진행 방법 을 바탕 으로 하 는 이미지 복원 기술'을 바탕 으로 한다.그것 은 빠 른 행진 방법 에 기초 하고 있다.그림 에서 복구 할 영역 을 고려 합 니 다.알고리즘 은 이 지역 의 경계 에서 시작 하여 지역 에 들 어가 경계 에 있 는 모든 내용 을 점차적으로 채 웁 니 다.그것 은 인근 픽 셀 주위 의 작은 이웃 지역 에서 복원 해 야 한다.이 픽 셀 은 이웃 에서 알 고 있 는 모든 픽 셀 의 정규 화 가중 권 과 대 체 됩 니 다.선택의 중요성 은 중요 한 문제 다.이 점 에 가 까 운 픽 셀,경계 에 가 까 운 법 선과 경계 윤곽 에 있 는 픽 셀 에 대해 더 많은 가중치 를 줍 니 다.픽 셀 이 복구 되면 다음 가장 가 까 운 픽 셀 로 빠르게 이동 합 니 다.FMM 은 이미 알 고 있 는 픽 셀 근처 의 픽 셀 을 먼저 복원 하여 수 동 시작 식 작업 처럼 작 동 하도록 확보 합 니 다.로고 cv2.INPAINT 사용 하기TELEA 에서 이 알고리즘 을 사용 합 니 다.
    두 번 째 알고리즘 은 Bertalmio,Marcelo,Andrea L.Bertozzi 와 Guillermo Sapiro 가 2001 년 에 작성 한'Navier-Tokes,유체 동력학 과 이미지 와 영상 보수'라 는 글 을 바탕 으로 한다.이 알고리즘 은 유체 동력학 을 바탕 으로 편 미분 방정식 을 이용한다.기본 원칙 은 heurisitic 입 니 다.그것 은 먼저 알 고 있 는 지역 의 가장 자 리 를 따라 알 수 없 는 지역 으로 간다.사진 을 계속 기다 리 고 있 습 니 다.이 를 위해 유체 동력학 에서 온 방법 을 사용한다.색상 을 얻 은 후 색상 을 채 워 서 이 지역 의 최소 차 이 를 줄 입 니 다.로고 cv2.INPAINT 사용 하기NS 에서 이 알고리즘 을 사용 합 니 다.
    코드
    입력 한 그림 크기 와 같은 마스크 를 만들어 야 합 니 다.복구 할 영역 에 0 픽 셀 이 아 닙 니 다.다른 건 다 간단 해.내 그림 은 검은색 필획 으로 강등 되 었 다.나 는 Paint 도구 로 해당 하 는 터치 와 마스크 를 만 들 었 다.
    
    import numpy as np
    from matplotlib import pyplot as plt
    import cv2
    
    img = cv2.imread('OpenCV_Logo_B.png')     # input
    mask = cv2.imread('OpenCV_Logo_C.png',0)  # mask
    
    dst_TELEA = cv2.inpaint(img,mask,3,cv2.INPAINT_TELEA)
    dst_NS = cv2.inpaint(img,mask,3,cv2.INPAINT_NS)
    
    plt.subplot(221), plt.imshow(img)
    plt.title('degraded image')
    plt.subplot(222), plt.imshow(mask, 'gray')
    plt.title('mask image')
    plt.subplot(223), plt.imshow(dst_TELEA)
    plt.title('TELEA')
    plt.subplot(224), plt.imshow(dst_NS)
    plt.title('NS')
    
    plt.tight_layout()
    plt.show()
    이것 은 원본 파일 과 마스크 파일 입 니 다Pictures
    출력:
    출력 입 니 다.첫 번 째 는 강 등 된 OpenCV 로고 이 고,두 번 째 그림 은 FMM 을 실행 하 는 데 필요 한 마스크 다.마지막 두 장의 사진 은 수리 한 결과 이다.확실 하지 않 지만,나 는 두 가지 수리 방법 사이 에는 아무런 차이 가 없다 고 생각한다.적어도 현재 입력 에 있어 서 는.

    참조 링크:
    1.OpenCV Image Inpainting 공식 문서https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_photo/py_inpainting/py_inpainting.html
    2、 https://www.bogotobogo.com/python/OpenCV_Python/python_opencv3_Image_reconstruction_Inpainting_Interpolation.php
    Python-OpenCV 의 cv2.inpaint()함수 사용 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 OpenCV cv2.inpaint()함수 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

    좋은 웹페이지 즐겨찾기