Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Loại bỏ đường ngang trong hình ảnh (OpenCV, Python, Matplotlib)

Để loại bỏ đường ngang trong hình ảnh, ta thực hiện:

  • Đọc hình ảnh cục bộ.
  • Chuyển đổi không gian màu.
  • Áp dụng ngưỡng cố định cho mỗi phần tử mảng.
  • Lấy phần tử cấu trúc kích thước/hình dạng cho phép biến đổi hình thái.
  • Thực hiện biến đổi hình thái nâng cao.
  • Tìm contour trong hình ảnh nhị phân.
  • Lặp bước 4 với kernel size khác.
  • Lặp bước 5 với kernel mới từ bước 7.
  • Hiển thị hình kết quả.

Ví dụ

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()

Kết quả

Loại bỏ đường ngang trong hình ảnh (OpenCV, Python, Matplotlib) Loại bỏ đường ngang trong hình ảnh (OpenCV, Python, Matplotlib) Loại bỏ đường ngang trong hình ảnh (OpenCV, Python, Matplotlib)

Quan sát đường ngang trong source_image không còn hiển thị trong resultant_image.