Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

이미지에서 수평선 제거(OpenCV, Python, Matplotlib)

<시간/>

이미지에서 수평선을 제거하려면 다음 단계를 수행할 수 있습니다. -

  • 로컬 이미지 읽기
  • 이미지를 한 색상 공간에서 다른 색상 공간으로 변환합니다.
  • 각 배열 요소에 고정 수준 임계값을 적용합니다.
  • 형태학적 연산을 위해 지정된 크기와 모양의 구조 요소를 가져옵니다.
  • 고급 형태 변환을 수행합니다.
  • 이진 이미지에서 등고선 찾기
  • 다른 커널 크기로 4단계를 반복합니다.
  • 7단계의 새 커널로 5단계를 반복합니다.
  • 결과 이미지를 표시합니다.

예시

import cv2

image = cv2.imread('input_image.png')
cv2.imshow('source_image', image)

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]

horizontal_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (25, 1))
detected_lines = cv2.morphologyEx(thresh, cv2.MORPH_OPEN,
horizontal_kernel, iterations=2)

cnts = cv2.findContours(detected_lines, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

for c in cnts:
   cv2.drawContours(image, [c], -1, (255, 255, 255), 2)

repair_kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 6))

result = 255 - cv2.morphologyEx(255 - image, cv2.MORPH_CLOSE, repair_kernel,
iterations=1)

cv2.imshow('resultant image', result)
cv2.waitKey()
cv2.destroyAllWindows()

출력

이미지에서 수평선 제거(OpenCV, Python, Matplotlib) 이미지에서 수평선 제거(OpenCV, Python, Matplotlib) 이미지에서 수평선 제거(OpenCV, Python, Matplotlib)

source_image의 수평선이 resultant_image에서 더 이상 표시되지 않습니다.