Поэтому, используя предоставленную Сергеем ссылку и используя порог вместо серой шкалы, я получаю намного лучшие результаты. Это код:
import cv2 # Import OpenCV
import numpy as np # Import NumPy
from matplotlib import pyplot as plt
image = cv2.imread("./image.jpg")
height, width = image.shape[0], image.shape[1]
white_padding = np.zeros((50, width, 3))
white_padding[:, :] = [255, 255, 255]
image = np.row_stack((white_padding, image))
_, mask = cv2.threshold(image, 220, 255, cv2.THRESH_BINARY_INV)
kernel = np.ones((30, 30), np.uint8)
closing = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
closing_uint8 = np.uint8(closing)
edges = cv2.Canny(closing_uint8, 100, 200)
plt.imshow(edges)
plt.show()
Проблема в том, что размер ядра необходимо изменить для разных изображений, например, это изображение:
выводит это:
Есть идеи, как решить эту проблему? Спасибо за вашу помощь!