Код: Выделить всё
import numpy as np
from PIL import Image
from scipy.ndimage import convolve
kernels = [
np.array([[1, 1, 1], [-4, 1, -4], [-4, -4, -4]]),
np.array([[-4, -4, 1], [-4, 1, 1], [-4, -4, 1]]),
np.array([[-4, -4, -4], [-4, 1, -4], [1, 1, 1]]),
np.array([[1, -4, -4], [1, 1, -4], [1, -4, -4]])
]
image_path = 'path/to/image/file'
with Image.open(image_path) as image:
if image.mode == 'RGBA':
image = image.convert('RGB')
image_np = np.array(image)
mask = np.isin(image_np, [200, 200, 200]).all(axis=-1)
binary_mask = np.zeros(image_np.shape[:2], dtype=int)
binary_mask[mask] = 1
for kernel in kernels:
convolution = convolve(binary_mask, kernel, mode='constant')
binary_mask[(binary_mask == 1) & (convolution >= 1)] = 0
Это очень неэффективно для длинных линий. Можете ли вы помочь мне разработать ядро (набор), которое удаляет открытые линии толщиной в 1 пиксель после нескольких сверток, но сохраняет закрытые линии толщиной в 1 пиксель?

Подробнее здесь: https://stackoverflow.com/questions/790 ... osed-lines