Computer >> Máy Tính >  >> Lập trình >> Python

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

Để xóa các đường ngang trong hình ảnh, chúng ta có thể thực hiện các bước sau -

  • Đọc hình ảnh địa phương.
  • Chuyển đổi hình ảnh từ không gian màu này sang không gian màu khác.
  • Áp dụng ngưỡng cấp cố định cho từng phần tử mảng.
  • Nhận một phần tử cấu trúc có kích thước và hình dạng được chỉ định cho các hoạt động hình thái học.
  • Thực hiện các phép biến đổi hình thái nâng cao.
  • Tìm các đường bao trong một hình ảnh nhị phân.
  • Lặp lại bước 4 với kích thước nhân khác nhau.
  • Lặp lại bước 5 với một nhân mới từ bước 7.
  • Hiển thị hình ả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()

Đầu ra

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

Quan sát rằng các đường ngang trong source_image của chúng tôi không còn hiển thị trong resultant_image nữa.